容器之间的链接不能与docker-compose版本2一起工作
在版本2 docker-compose文件中的容器之间的链接不起作用。
只有在使用“旧” 版本1格式时,才会看到容器的/ etc / hosts中的链接。
我有以下基本版本2 docker-compose.yml文件。
版本:'2' 服务: 我的应用程序内: 图片:tomcat:8.0 container_name:my-app1 链接: - 我的redis 我-Redis的: image:redis container_name:my-redis1
当我运行以下命令:
docker工人 - 组成up -d
我看到两个容器已启动,但是在/ etc / hosts文件中没有创build链接 :
docker执行官 - 我的 - app1的猫/ etc /主机
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”中,我可以使用IP地址“my-redis1”来ping另一个容器,但是我不能'ping my-redis1'(根据名字)。
这里可能是什么问题?
附加信息:
- Docker版本1.10.0,版本590d5108
- docker-compose 1.6.0版,build d99cad6
- Linux内核:4.3.5-300.fc23.x86_64
在Docker的版本2中,默认情况下,在同一networking中的“服务”(容器)之间是链接的。
使用下面的docker-compose.yml文件
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
,以检查它们是否已链接。
例如:
$ 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也使用firewalld。
-Arjen