如何在Docker daemon全局配置--add-host=docker01.company.lan:host-gateway?
全局配置Docker添加
docker01.company.lan:host-gateway映射的可行性及替代方案 核心问题
能否通过/etc/docker/daemon.json等全局配置文件,设置--add-host=docker01.company.lan:host-gateway,无需在每个容器或Stack中手动添加extra_hosts?
需求背景
公司内部使用搭载Eureka的Java容器,需要通过Docker主机名加端口的方式动态访问服务。当前仅能在Stack配置中添加extra_hosts作为临时解决办法,若能在各Docker主机上全局配置该host映射,可显著降低重复配置的工作量。
复现环境
- 操作系统:Ubuntu 22.04
- Docker版本:20.10.12,build e91ed57
测试验证示例
不生效的配置(未手动添加extra_hosts)
version: '3' services: nginx: image: nginx:alpine ports: - '30004:80' busybox: image: busybox command: "watch -n 5 wget --spider http://docker01.company.lan:30004"
生效的配置(手动添加extra_hosts)
version: '3' services: nginx: image: nginx:alpine ports: - '30004:80' busybox: image: busybox extra_hosts: - docker01.company.lan:host-gateway command: "watch -n 5 wget --spider http://docker01.company.lan:30004"
结论与替代方案
目前Docker官方不支持在daemon.json中直接配置host-gateway类型的全局host映射。daemon.json里的add-host配置仅接受静态IP值,无法识别host-gateway这个特殊标识(该标识会在容器启动时动态解析为主机的网关IP)。
如果要实现近似全局生效的效果,可采用以下两种替代方式:
静态IP全局映射
在所有Docker主机上固定自身IP,修改/etc/docker/daemon.json添加静态映射:{ "add-host": ["docker01.company.lan:192.168.1.100"] }配置完成后重启Docker服务:
systemctl restart docker。注意:此方式依赖主机IP固定,若主机IP动态变化则会失效。Compose扩展字段复用配置
通过Docker Compose的扩展字段(以x-开头)定义通用的extra_hosts配置,在各Stack中引用即可:x-common-extra-hosts: &common-extra-hosts extra_hosts: - docker01.company.lan:host-gateway version: '3' services: nginx: image: nginx:alpine ports: - '30004:80' busybox: image: busybox <<: *common-extra-hosts command: "watch -n 5 wget --spider http://docker01.company.lan:30004"
内容的提问来源于stack exchange,提问作者MadMurl0c
相关产品推荐
相关产品推荐

