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

7 浏览
0 Comments

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

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

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

我该如何确保位于front的容器可以向位于api的容器发送请求?

我知道可以使用docker run为单个容器设置--default-gateway选项,以便将特定IP地址分配给该容器,但是似乎在使用docker-compose时不提供此选项。

目前,我最终会执行docker inspect my_api_container_id并查看输出中的网关。它有效,但问题是该IP是随机分配的,因此我无法依赖它。

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

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

但最终我要找到的是:

  • 如何使两个不同的docker-compose项目相互通信?
admin 更改状态以发布 2023年5月24日
0
0 Comments

更新:自Compose文件版本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

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

我还没在文档中找到相关的参考,但它是可行的!

0
0 Comments

你只需要确保想要交流的容器在同一个网络中。网络是一个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,反之亦然。

0