不使用docker compose版本2的容器之间的链接
版本2 docker compose文件中容器之间的链接不起作用 只有在使用“旧”版本1格式时,我才能在容器的/etc/hosts中看到链接 我有以下基本版本2 docker-compose.yml文件 版本:“2” 服务: 我的应用程序: 图片:tomcat:8.0 容器名称:my-app1 链接: -我的redis 我的redis: 图片:redis 容器名称:my-redis1 当我运行以下命令时: docker-compose up -d docker compose up-d 我看到启动了两个容器,但在/etc/hosts文件中没有创建链接: docker exec -it my-app1 cat /etc/hosts docker exec-it my-app1 cat/etc/hosts 127.0.0.1本地主机 ::1本地主机ip6本地主机ip6环回 fe00::0 ip6 localnet ff00::0 ip6 mcastprefix ff02::1 ip6所有节点 ff02::2 ip6所有路由器 172.18.0.3 2abb84ccada9 从'my-app1'中,我可以使用'my-redis1'的IP地址ping另一个容器,但我不能'ping my-redis1'(基于名称) 这里有什么问题 其他信息:不使用docker compose版本2的容器之间的链接,docker,docker-compose,Docker,Docker Compose,版本2 docker compose文件中容器之间的链接不起作用 只有在使用“旧”版本1格式时,我才能在容器的/etc/hosts中看到链接 我有以下基本版本2 docker-compose.yml文件 版本:“2” 服务: 我的应用程序: 图片:tomcat:8.0 容器名称:my-app1 链接: -我的redis 我的redis: 图片:redis 容器名称:my-redis1 当我运行以下命令时: docker-compose up -d docker compose up-d 我看到启
- Docker版本1.10.0,内部版本590d5108
- docker compose版本1.6.0,构建d99cad6
- Linux内核:4.3.5-300.fc23.x86_64
- 使用docker版本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
您只需从my redis
容器执行ping my app
,从my app
容器执行ping my redis
,即可检查它们是否链接
例如:
$ docker-compose up -d
$ docker exec -it my-app1 bash
# ping my-redis
您可以在下面的链接中获得更多信息:
问题是我的Fedora主机的防火墙 临时禁用防火墙(“systemctl stop firewall d”,后跟“systemctl restart docker”)后,一切都按照docker文档进行 与docker一起使用时,firewalld似乎存在一个主要问题,请参阅: 请注意,RHEL/Centos 7也使用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
版本:“2”
服务:
我的身份验证服务器:
构建:身份验证服务器
端口:
- "8082:8082"
my_api:
构建:核心api
端口:
- "8081:8081"
链接:
-my_auth_server:auth server#谢谢你的回答。但是,我无法从“my-app1”ping“my-redis1”,反之亦然。我只能使用IP地址ping。“my-app1”的/etc/hosts中未显示名称“my-redis1”。当我选中“docker network ls”时,我看到docker compose创建了一个新网络。当我使用版本1 docker compose文件时,我确实会在'my-app1'.PS的/etc/hosts文件中看到'my-redis1'。此外,当我从version2 docker compose文件中删除链接时,我无法使用“ping my-redis1”从“my-app1”ping“my-redis1”。我认为您必须对服务名称(ping my app
)进行ping,而不是对容器名称进行ping。你能再检查一下我上面评论的命令是否有效吗?我只能使用IP地址在容器之间ping,不能通过“ping my app”或“ping my-app1”。“我的应用程序”是否应该出现在“我的redis”的/etc/hosts文件中?我已尝试重现该问题,但未能重现。我用我遵循的步骤更新了答案,你能再检查一遍吗?“我的应用”不应该出现在那里。Docker 1.10不再使用/etc/hosts
它使用嵌入式DNS服务器。主机上运行的dns服务器和firewald存在已知问题。这可能是造成问题的原因。您应该能够使用容器名称和服务名称ping。谢谢,问题是主机上的防火墙(Fedora)。Docker容器应该提供与主机的隔离,但是新的网络似乎对主机配置非常挑剔:-(。。。
$ docker-compose up -d
$ docker exec -it my-app1 bash
# ping my-redis
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