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

我有两个进程,我container1集装箱和container2。 我想用Docker Compose一起运行这两个。 container1应该连接到container2。 这目前不工作,我不知道这个问题。

我试过一些testing场景…

使用Docker Compose运行container2:

version: '2' services: container2: image: container2 ports: - "4003:4003" 

现在从Docker外部运行container1源代码并指向127.0.0.1:4003 – 连接ok。

或者像上面那样运行container2。 记下IP地址,然后从Compose运行container1,直接引用IP – 也连接好:

 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 

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

depends_on只设置容器的启动顺序: https : depends_on

我想你还需要包含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在启动[容器]之前不会等待[依赖项]“准备就绪” – 直到它们已经启动。 如果您需要等待服务准备就绪,请参阅控制启动顺序以获取有关此问题的更多信息以及解决此问题的策略。

在container2准备好连接之前,您的container1应用程序可能已经启动了。