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

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

  • ~/front/docker-compose.yml

  • ~/api/docker-compose.yml

如何确保in中的容器front可以将请求发送到in中的容器api

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

目前,我最终做了一个,docker inspect my_api_container_id然后查看输出中的网关。它可以工作,但问题是该IP是随机分配的,因此我不能依靠它。

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

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

但最后我要照顾的是:

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


海绵宝宝撒
浏览 3473回答 3
3回答

慕姐4208626

您只需要确保要互相交谈的容器在同一网络上即可。网络是一流的docker构造,并不特定于组合。# front/docker-compose.ymlversion: '2'services:  front:    ...    networks:      - some-netnetworks:  some-net:    driver: bridge...# api/docker-compose.ymlversion: '2'services:  api:    ...    networks:      - front_some-netnetworks:  front_some-net:    external: true注意:根据“项目名称”为您的应用程序网络指定名称,该名称基于其所在目录的名称,在这种情况下front_,添加了前缀然后,他们可以使用服务名称互相交谈。从front您可以做到ping api,反之亦然。

噜噜哒

只是@ johnharris85的一个好答案,当您运行docker compose文件时,default会创建一个“ ”网络,因此您可以将其作为外部网络添加到另一个compose文件中:# front/docker-compose.yml version: '2'   services:       front_service:    ......# api/docker-compose.ymlversion: '2'services:  api_service:    ...    networks:      - front_defaultnetworks:  front_default:    external: true对我来说,这种方法更合适,因为我不拥有第一个docker-compose文件,而是想与之通信。

慕仙森

从撰写文件版本3.5开始:现在可以使用:version: "3.5"services:  proxy:    image: hello-world    ports:      - "80:80"    networks:      - proxynetnetworks:  proxynet:    name: custom_networkdocker-compose up -d将加入一个名为“ custom_network”的网络。如果不存在,它将被创建!root@ubuntu-s-1vcpu-1gb-tor1-01:~# docker-compose up -dCreating network "custom_network" with the default driverCreating root_proxy_1 ... done现在,您可以执行以下操作:version: "2"services:  web:    image: hello-world    networks:      - my-proxy-netnetworks:  my-proxy-net:    external:      name: custom_network这将创建一个将在外部网络上的容器。我在文档中找不到任何参考,但是它有效!
打开App,查看更多内容
随时随地看视频慕课网APP