为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2019-11-22 13:15:06
我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项目如何相互通信?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您只需要确保要互相交谈的容器在同一网络上即可。网络是一流的docker构造,并不特定于组合。


# 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,反之亦然。


查看完整回答
反对 回复 2019-11-22
?
噜噜哒

TA贡献1784条经验 获得超7个赞

只是@ johnharris85的一个好答案,当您运行docker compose文件时,default会创建一个“ ”网络,因此您可以将其作为外部网络添加到另一个compose文件中:


# front/docker-compose.yml 

version: '2' 

  services:   

    front_service:

    ...

...


# api/docker-compose.yml

version: '2'

services:

  api_service:

    ...

    networks:

      - front_default

networks:

  front_default:

    external: true

对我来说,这种方法更合适,因为我不拥有第一个docker-compose文件,而是想与之通信。


查看完整回答
反对 回复 2019-11-22
?
慕仙森

TA贡献1827条经验 获得超7个赞

从撰写文件版本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

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


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


查看完整回答
反对 回复 2019-11-22
  • 3 回答
  • 1 关注
  • 3468 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信