多个 docker-compose 项目之间的通信

新手上路,请多包涵

我在两个不同的文件夹中有两个单独的 docker-compose.yml 文件:

  • ~/front/docker-compose.yml
  • ~/api/docker-compose.yml

如何确保 --- 中的容器可以向 --- api front 中的容器发送请求?

我知道可以使用 docker run 为单个容器设置 --default-gateway 选项,以便可以为该容器分配特定的 IP 地址,但似乎此选项在以下情况下不可用使用 docker-compose

目前我最终做了一个 docker inspect my_api_container_id 并查看输出中的网关。它可以工作,但问题是这个 IP 是随机分配的,所以我不能依赖它。

因此,这个问题的另一种形式可能是:

  • 我可以使用 docker-compose 将固定 IP 地址分配给特定容器吗?

但最终我要照顾的是:

  • 两个不同的 docker-compose 项目如何相互通信?

原文由 Jivan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 814
2 个回答

您只需要确保要相互通信的容器在同一个网络上。网络是一流的 docker 构造,并不特定于 compose。

 # front/docker-compose.yml
version: '2'
services:
  front:
    ...
    networks:
      - some-net
networks:
  some-net:
    driver: bridge

 # api/docker-compose.yml
version: '2'
services:
  api:
    ...
    networks:
      - front_some-net
networks:
  front_some-net:
    external: true

注意:您的应用程序网络的名称基于“项目名称”,该名称基于其所在目录的名称,在本例中添加了前缀 front_

然后他们可以使用服务名称相互交谈。从 front 你可以做 ping api 反之亦然。

原文由 johnharris85 发布,翻译遵循 CC BY-SA 4.0 许可协议

更新:从撰写文件版本 3.5 开始:

这现在有效:

 version: "3.5"
services:
  proxy:
    image: hello-world
    ports:
      - "80:80"
    networks:
      - proxynet

networks:
  proxynet:
    name: custom_network

docker-compose up -d 将加入一个名为“custom_network”的网络。如果它不存在,它将被创建!

 root@ubuntu-s-1vcpu-1gb-tor1-01:~# docker-compose up -d
Creating network "custom_network" with the default driver
Creating root_proxy_1 ... done

现在,您可以这样做:

 version: "2"
services:
  web:
    image: hello-world
    networks:
      - my-proxy-net
networks:
  my-proxy-net:
    external:
      name: custom_network

这将创建一个位于外部网络上的容器。

我在文档中找不到任何参考,但它有效!

原文由 cstrutton 发布,翻译遵循 CC BY-SA 4.0 许可协议

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