You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别Docker容器运行的宿主机系统 能否将Docker daemon标签传入容器

解决方案

你可以通过Docker daemon全局默认配置实现需求,全程不需要修改容器启动参数、不需要挂载任何文件、不需要暴露/var/run/docker.sock,配置一次全局生效。

方案1:Daemon全局注入daemon标签与宿主机信息(最适配需求)

该方案利用Docker官方内置的默认环境变量配置能力,将需要传递的daemon标签、宿主机系统信息配置为所有容器启动时自动注入的全局环境变量:

  • 第一步:编辑Docker daemon配置文件
    Linux环境下编辑/etc/docker/daemon.json,Windows/macOS环境直接在Docker Desktop设置的「Docker Engine」页编辑配置:
    {
      // 你的Docker daemon自定义标签
      "labels": [
        "daemon_zone=east",
        "daemon_business=payment"
      ],
      // 所有容器自动注入的默认环境变量
      "default-env": [
        "DAEMON_ZONE=east",
        "DAEMON_BUSINESS=payment",
        "HOST_OS=ubuntu22.04" // 填入当前宿主机的系统标识,可提前在宿主机执行`grep '^PRETTY_NAME=' /etc/os-release | cut -d '=' -f2 | tr -d '"'`获取
      ]
    }
    
  • 第二步:重启Docker daemon生效
    Linux执行systemctl restart docker,Windows/macOS直接重启Docker Desktop即可。
  • 第三步:容器内部直接读取环境变量即可获取对应信息,不需要任何额外配置:
    # 获取daemon标签
    echo $DAEMON_ZONE
    # 获取宿主机系统信息
    echo $HOST_OS
    

该配置对daemon上所有新启动的容器生效,docker-compose部署的容器也会自动继承这些环境变量,完全不需要修改docker-compose.yml文件。

方案2:容器内部无配置识别宿主机系统

如果你只需要识别宿主机系统类型,不需要传递自定义daemon标签,可以直接在容器内部读取内核信息实现,不需要任何外部配置:

#  Shell示例代码
if grep -q "WSL2" /proc/version; then
  HOST_OS="windows"
elif grep -q "LinuxKit" /proc/version; then
  HOST_OS="macos"
else
  HOST_OS=$(grep '^ID=' /etc/os-release | cut -d '=' -f2 | tr -d '"')
fi
echo "宿主机系统为:$HOST_OS"
  • Windows WSL2环境的Docker启动的容器,/proc/version会携带WSL2标识
  • macOS Docker Desktop启动的容器,/proc/version会携带LinuxKit标识
  • 原生Linux宿主机启动的容器,直接读取/etc/os-release即可匹配到宿主机发行版信息

内容的提问来源于stack exchange,提问作者Datz。

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:54:00