【问题标题】:Docker container cannot connect to host machine: No route to hostDocker容器无法连接到主机:没有到主机的路由
【发布时间】: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


【解决方案1】:

令我惊讶的是,这实际上是我的防火墙问题。

更新/启用 docker 主机上的 tcp 端口 [2375] 修复了该问题。

sudo firewall-cmd --zone=public --add-port=2375/tcp --permanent

sudo firewall-cmd --reload 

有用的链接: 1.enter link description here 2.enter link description here

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多