我有两个独立的docker-compose。Yml文件在两个不同的文件夹:
~/front/docker-compose.yml
~/api/docker-compose.yml
我如何确保前面的容器可以在api中向容器发送请求?
我知道——default-gateway选项可以使用docker run为单个容器设置,这样就可以为该容器分配特定的IP地址,但似乎在使用docker-compose时这个选项不可用。
目前,我结束了一个docker检查my_api_container_id,并查看输出中的网关。它是有效的,但问题是这个IP是随机分配的,所以我不能依赖它。
这个问题的另一种形式可能是:
我可以使用docker-compose将一个固定的IP地址归属于特定的容器吗?
但最终我所追求的是:
两个不同的docker-compose项目如何相互通信?
每个人都解释得很好,所以我将添加必要的代码,只做一个简单的解释。
使用docker-compose 3.5+版本在docker-compose之外创建的网络(“外部”网络)。
进一步的解释可以在这里找到。
第一个docker-compose。yml文件应该定义名为giveItANamePlease的网络,如下所示。
networks:
my-network:
name: giveItANamePlease
driver: bridge
第一码头的服务。Yml文件可以使用网络如下:
networks:
- my-network
在第二个docker-compose文件中,我们需要使用我们在第一个docker-compose文件中使用的网络名来代理网络,在本例中是giveItANamePlease:
networks:
my-proxy-net:
external:
name: giveItANamePlease
现在你可以在第二个docker-compose服务中使用my-proxy-net了。Yml文件如下。
networks:
- my-proxy-net
之前的帖子信息是正确的,但是没有详细说明如何链接容器,应该连接为“external_links”。
希望这个例子能让你更清楚:
假设您有app1/docker-compose。Yml,包含两个服务(svc11和svc12),以及app2/docker-compose。Yml和另外两个服务(svc21和svc22),假设你需要以交叉方式连接:
Svc11需要连接到svc22的容器
Svc21需要连接到svc11的容器。
所以构型应该是这样的:
这是app1/docker-compose.yml:
version: '2'
services:
svc11:
container_name: container11
[..]
networks:
- default # this network
- app2_default # external network
external_links:
- container22:container22
[..]
svc12:
container_name: container12
[..]
networks:
default: # this network (app1)
driver: bridge
app2_default: # external network (app2)
external: true
这是app2/docker-compose.yml:
version: '2'
services:
svc21:
container_name: container21
[..]
networks:
- default # this network (app2)
- app1_default # external network (app1)
external_links:
- container11:container11
[..]
svc22:
container_name: container22
[..]
networks:
default: # this network (app2)
driver: bridge
app1_default: # external network (app1)
external: true