Docker Compose如何配置extra_host指向其他容器?
解决方案
方案1:利用Docker网络别名(推荐)
Docker Compose支持给服务在指定网络中设置别名,同网络内的其他容器可通过别名直接访问该服务。给proxy服务在backend网络添加api.myapp.com的别名,就能让app容器解析这个域名到proxy容器。
修改后的Compose配置:
services: proxy: depends_on: - app networks: default: backend: aliases: - api.myapp.com # 添加网络别名 ports: - 80:80 app: # 移除原有的extra_hosts配置 networks: - backend expose: - 9000
原理:app和proxy同属backend网络,当app容器内发起api.myapp.com请求时,Docker内置DNS会直接返回proxy容器的IP,完全满足需求且无需修改应用二进制文件。
方案2:启动时动态修改hosts文件
如果方案1受限于环境无法使用,可通过启动脚本动态获取proxy的IP并写入/etc/hosts。
修改后的Compose配置:
services: proxy: depends_on: - app networks: - default - backend ports: - 80:80 app: networks: - backend expose: - 9000 command: > sh -c " # 获取proxy容器的IP地址 PROXY_IP=$(getent hosts proxy | awk '{print $1}') && # 将域名与IP绑定写入hosts echo \"$PROXY_IP api.myapp.com\" >> /etc/hosts && # 替换为你的应用实际启动命令,比如原本的./run-app ./run-app "
注意:需将./run-app替换为你应用原本的启动命令,确保脚本完成hosts修改后能正常启动应用。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

