【发布时间】:2017-05-09 20:50:52
【问题描述】:
我一直在尝试使用 docker compose 设置 docker 环境。让我难过的一个问题是我的 docker 容器无法到达我的主机。
我使用以下 compose 文件设置了一个容器:
version: '3'
services:
webapp:
image: ...
ports:
- "8080:8080"
当我进入容器时,我可以 ping 我的主机:
ping ${dockerHostIP}
但是,当我尝试在容器内使用 curl 检索主页时:
curl http://${dockerHostIP}:8080
我明白了:
curl: (7) Failed connect to ${dockerHostIP}:8080; No route to host
我不知道应该怎么做才能解决这个 No route to host 错误。不幸的是,我需要能够做到这一点,因为 Web 应用程序在内部使用其主机名发出请求。
跟踪路由结果:
traceroute ${dockerHostIP}
traceroute to ${dockerHostIP} (${dockerHostIP}), 30 hops max, 60 byte packets
1 ${dockerHostName} (${dockerHostIP}) 0.039 ms !X 0.012 ms !X 0.007 ms !X
【问题讨论】:
-
真的很奇怪...
traceroute ${dockerHostIP}的结果是什么? -
感谢您对此进行调查...我已使用 traceroute 结果编辑了问题。
-
我猜,webapp 已经启动了,你可以从 docker 主机访问
http://${dockerHostIP}:8080?我只有两个想法:1)webapp 不接受来自容器的连接或 2)docker 主机防火墙阻止来自容器的传入连接。顺便说一句,你能通过telnet ${dockerHostIP} 8080连接到主机吗? -
我可以从 docker 主机访问 http://${dockerHostIP}:8080。 telnet ${dockerHostIP} 8080 返回 Trying ${dockerHostIP}... telnet: Unable to connect to remote host: No route to host 我尝试完全禁用主机上的防火墙 systemctl firewalld stop 然后使用启动容器docker-compose up -d 我还是有同样的问题
-
这很尴尬...原来是防火墙问题。我以为我尝试禁用防火墙并运行,但 docker-compose up 不会在没有防火墙的情况下运行。当我在 docker 主机上使用“firewall-cmd --permanent --add-port=8080/tcp”打开端口时,这解决了问题。感谢您为我指明正确的方向!
标签: networking docker docker-compose