同一 host 的两个 docker-compose.yml 如何互相访问 http 服务?

我的情况是这样,在 host H 上,

有 docker-compose.yml A

version: "3.3"

services:
    nginx:
        image: nginx:1.20
        ports:
            - "801:80"

有 docker-compose.yml B

version: "3.3"

services:
    nginx:
        image: nginx:1.20
        ports:
            - "802:80"
        extra_hosts:
            - "host.docker.internal:host-gateway"

在 host A 上,curl localhost:801 可以访问。
但是进入 docker-compose.yml B 的 容器 nginx,curl host.docker.internal:801 缺无法访问,如何做到可以呢?

阅读 4.2k
3 个回答

如果两个docker-compose.yml定义的服务都在同一个网络下,那么可以直接通过 服务名字 就可以访问到其他的容器。

比如:

version: "3.3"

services:
    nginx1:
        image: nginx:1.20
        ports:
            - "801:80"
    nginx2:
        image: nginx:1.20
        ports:
            - "802:80"

在nginx2这个服务,访问nginx1的时候,就可以直接通过 nginx1 这个服务名字访问。
在容器2中执行

docker exec -it 826 bash
root@8269c4a5112b:/# curl -v nginx1 
*   Trying 172.19.0.2:80...
* Connected to nginx1 (172.19.0.2) port 80 (#0)

方法一:把 host.docker.internal 换成宿主机 ip

方法二:使用 docker 创建一个 「网络 A」,在两个 yaml 里面声明使用 「网络 A」,然后就可以使用 service name 互相访问,就是把 host.docker.internal 换成 nginx

先建一个自定义的网络:

docker network create mynetwork

然后,在这两个 Docker Compose 文件里,都加 networks 配置:

docker-compose.yml A:

version: "3.3"

services:
    nginx:
        image: nginx:1.20
        ports:
            - "801:80"
        networks:
            - mynetwork

networks:
    mynetwork:
        external: true

docker-compose.yml B:

version: "3.3"

services:
    nginx:
        image: nginx:1.20
        ports:
            - "802:80"
        networks:
            - mynetwork

networks:
    mynetwork:
        external: true
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题