容器之间的链接不适用于 docker-compose 版本 2
Links between containers not working with docker-compose version 2
版本 2docker-compose 文件中容器之间的链接不工作。
只有在使用 'old' 版本 1 格式时,我才会在容器的 /etc/hosts 中看到 link。
我有以下基本版本 2 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
当我运行以下命令时:
docker-compose up -d
我看到启动了两个容器,但是没有在/etc/hosts文件中创建link:
docker exec -it my-app1 cat /etc/hosts
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 version 1.6.0, build d99cad6
- Linux内核:4.3.5-300.fc23.x86_64
使用 docker-compose 的版本 2,默认情况下,同一网络中的 'services'(容器)在它们之间链接。
使用下面的 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 主机的 firewalld。
暂时禁用防火墙('systemctl stop firewalld',然后 'systemctl restart docker'),一切正常,根据 docker 文档。
与 docker 一起使用时,firewalld 似乎存在一个主要问题,请参阅:https://github.com/docker/docker/issues/16137。
注意RHEL/Centos7也使用firewalld。
-Arjen
在我的例子中,问题出在服务名称上。
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
版本 2docker-compose 文件中容器之间的链接不工作。
只有在使用 'old' 版本 1 格式时,我才会在容器的 /etc/hosts 中看到 link。
我有以下基本版本 2 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
当我运行以下命令时:
docker-compose up -d
我看到启动了两个容器,但是没有在/etc/hosts文件中创建link:
docker exec -it my-app1 cat /etc/hosts
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 version 1.6.0, build d99cad6
- Linux内核:4.3.5-300.fc23.x86_64
使用 docker-compose 的版本 2,默认情况下,同一网络中的 'services'(容器)在它们之间链接。
使用下面的 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 主机的 firewalld。
暂时禁用防火墙('systemctl stop firewalld',然后 'systemctl restart docker'),一切正常,根据 docker 文档。
与 docker 一起使用时,firewalld 似乎存在一个主要问题,请参阅:https://github.com/docker/docker/issues/16137。
注意RHEL/Centos7也使用firewalld。
-Arjen
在我的例子中,问题出在服务名称上。
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