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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:37:06