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 |
您只需从您的
例如:
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 |