多个docker-compose项目之间的通信。
多个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日
更新:自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
这将创建一个在外部网络上的容器。
我还没在文档中找到相关的参考,但它是可行的!
你只需要确保想要交流的容器在同一个网络中。网络是一个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
,反之亦然。