我有两个进程,我将其容器化为container1和container2。我想使用Docker Compose一起运行这两个。 container1应该连接到container2。这当前不起作用,我无法弄清楚问题。
我尝试过的一些测试场景......
使用Docker Compose运行container2:
version: '2'
services:
container2:
image: container2
ports:
- "4003:4003"
现在从Docker外部运行container1源代码并指向127.0.0.1:4003 - 连接正常。
或者如上所述运行container2;记下IP地址,然后从Compose运行container1,直接引用IP - 也连接ok:
version: '2'
services:
container1:
image: container1
environment:
- HOST=172.18.0.2
- PORT=4003
但是当我将它们放在同一个docker-compose.yml
文件中时,container1永远不会连接到container2,但可以按名称ping它 - 是什么给出的?
version: '2'
services:
container1:
image: container1
depends_on:
- container2
environment:
- HOST=container2
- PORT=4003
container2:
image: container2
ports:
- "4003:4003"
编辑:使用容器别名似乎存在问题,因为这也有效:
version: '2'
services:
container1:
image: container1
depends_on:
- container2
environment:
- HOST=172.18.0.2
- PORT=4003
container2:
image: container2
ports:
- "4003:4003"
另一个难题:内部容器2使用socat
来暴露应用正在侦听的端口:
echo "Forking :::4001 onto 0.0.0.0:4003\n"
socat TCP-LISTEN:4003,fork TCP:127.0.0.1:4001
由于某种原因,这似乎不适用于容器别名?
答案 0 :(得分:1)
depends_on
仅设置容器的开始顺序:https://docs.docker.com/compose/compose-file/#dependson
我认为您还需要包含links
:https://docs.docker.com/compose/compose-file/#links
version: '2'
services:
container1:
image: container1
depends_on:
- container2
links:
- container2
environment:
- HOST=container2
- PORT=4003
container2:
image: container2
ports:
- "4003:4003"
另外,来自文档:
在启动[容器]之前,depends_on不会等待[dependencies]“准备好” - 直到它们已经启动。如果您需要等待服务准备就绪,请参阅Controlling startup order以了解有关此问题的更多信息以及解决此问题的策略。
在container2真正准备好连接之前,你的container1应用程序可能正在启动。