不使用docker-compose版本2的容器之间的链接

Links between containers not working with docker-compose version 2

版本2 Docker撰写文件中容器之间的链接不起作用。

只有在使用"旧"版本1格式时,我才能看到容器的/etc/hosts中的链接。

我有以下基本版本2 docker-compose.yml文件。

1
2
3
4
5
6
7
8
9
10
11
version: '2'

services:
  my-app:
    image: tomcat:8.0
    container_name: my-app1
    links:
      - my-redis
  my-redis:
    image: redis
    container_name: my-redis1

当我运行以下命令时:

1
docker-compose up -d

我看到启动了两个容器,但在/etc/hosts文件中没有创建链接:

1
docker exec -it my-app1 cat /etc/hosts
1
2
3
4
5
6
7
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.18.0.3      2abb84ccada9

在"my-app1"中,我可以使用"my-redis1"的IP地址对另一个容器执行ping操作,但我无法"ping my-redis1"(基于名称)。

这里可能有什么问题?

其他信息:

  • Docker版本1.10.0,内部版本590D5108
  • Docker Compose 1.6.0版,构建D99CAD6
  • Linux内核:4.3.5-300.fc23.x86_64


对于Docker版本2,默认情况下,在同一网络中的"服务"(容器)在它们之间链接。

使用下面的docker-compose.yml文件

1
2
3
4
5
6
7
8
9
10
11
version: '2'

services:
  my-app:
    image: tomcat:8.0
    container_name: my-app1
    links:
      - my-redis
  my-redis:
    image: redis
    container_name: my-redis1

您只需从您的my-redis容器执行ping my-app和从您的my-app容器执行ping my-redis以检查它们是否链接。

例如:

1
2
3
$ docker-compose up -d
$ docker exec -it my-app1 bash
# ping my-redis

您可以在下面的链接中获得更多信息:https://blog.docker.com/2016/02/compose-1-6/https://github.com/docker/compose/blob/master/docs/networking.md网站


问题是我的Fedora主机有防火墙。

在防火墙暂时禁用的情况下("SystemCtl stop firewalld",然后是"SystemCtl restart docker"),根据docker文档,一切工作正常。

与Docker一起使用时,Firewalld似乎存在一个主要问题,请参阅:https://github.com/docker/docker/issues/16137。

注意,rhel/centos 7也使用防火墙。

-阿仁


在我的例子中,问题出在service name中。

1
2
3
4
5
6
7
8
9
10
11
12
13
version:"2"
services:
    my_auth_server:
       build: auth-server
       ports:
           -"8082:8082"

    my_api:
       build: core-api
       ports:
           -"8081:8081"  
       links:
           - my_auth_server:auth-server # <-- here changed from auth_server to auth-server