在Compose下运行时,Docker容器无法连接到第二个容器

时间:2017-03-18 11:36:08

标签: docker docker-compose

我有两个进程,我将其容器化为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 

由于某种原因,这似乎不适用于容器别名?

1 个答案:

答案 0 :(得分:1)

depends_on仅设置容器的开始顺序:https://docs.docker.com/compose/compose-file/#dependson

我认为您还需要包含linkshttps://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应用程序可能正在启动。