【问题标题】:Unable to ping docker container hosted on a different VM无法 ping 托管在不同 VM 上的 docker 容器
【发布时间】:2020-02-27 11:07:35
【问题描述】:
 Two docker container hosted on two different VM, port exposed to both docker container 60000. 
 Both VMs communicate through each through NAT NETWORK and not using docker 
 network compose.  Running docker-A sudo docker run --rm -it -p 8888:8888 -v 
 $(pwd):/workdir -w /workdir tensor  
 Docker-A->172.17.0.1
 Docker-B->172.17.0.3 
 VM-A(Docker-A hosted)->172.25.1.24
 VM-B(Docker-B hosted)->172.25.1.13

当我尝试从 Docker-A ping 到 Docker-B 时,我收到 Destination Host Unreachable 错误。我使用 ping 172.17.0.3 连接 Docker-B。与 Docker 基本网络问题作斗争。高度赞赏帮助。 谢谢

【问题讨论】:

  • 你运行了哪些 docker 命令?或者你有撰写文件吗?请更新您的问题。
  • @QuintenScheppermans 我已经更新了这个问题。谢谢。你认为我应该使用 docker-compose 吗?
  • 就个人而言,我更喜欢声明式方法而不是命令式方法,但这在这里无关紧要。我需要的是你的“docker run ....”命令。
  • 感谢@QuintenScheppermans 更新了问题,现在包括运行 docker 容器的命令。
  • 好像你的格式有点不对。我猜你代码块中的前两句话是你自己输入的用来解释你的情况的句子?

标签: docker ubuntu networking virtual-machine docker-networking


【解决方案1】:

切勿直接使用容器专用 IP 地址。在这种情况下,VM A 无法访问 VM B 上的容器专用 IP 地址。实际上只有两种情况可以完全访问容器专用 IP 地址,并且在这两种情况下都有更好的方法来做到这一点。

每个虚拟机都运行自己的 Docker 实例,并拥有自己的私有网络空间。虽然看起来两个容器的地址都在 172.17.0.0/16 中,但它们实际上是独立的网络,实际上两个 Docker 守护进程可以独立决定为两个容器分配相同的 IP 地址。除非您已竭尽全力配置overlay network,否则一个 VM(或物理系统)无法通过私有 IP 地址访问另一台服务器的容器,否则没有 IP 路由可以到达那里。 (在这种情况下,由于两台主机具有相同的 IPv4 网络范围,VM A 到 172.17.0.0/16 的路由指向 VM A 的 Docker 网络,这与 VM B 的不同。)

要使容器可以从 Docker 空间外部访问,您需要使用 docker run -p 选项(或等效的 Docker Compose ports: 设置)启动它。然后,您可以使用主机(或 VM)的 DNS 名称或 IP 地址以及发布的(第一个)端口号来访问容器。您不能以这种方式ping(1) 远程容器,但也没有任何特殊原因要发送容器 ICMP 数据包。

vm-a$ curl http://172.25.1.13:8888  # using vm-b's IP address

如果两个容器位于同一主机(或 VM)上,您可以 create a Docker network 并运行两个容器 --name some-name --net some-net;如果两者都具有相同的--net some-net,那么每个容器都可以使用另一个容器的some-name 作为主机名来访问另一个容器。即使您不使用 Compose,Networking in Compose 也可能更平易近人;如果没有 Compose,您必须手动 docker network create 网络。

(我说过容器私有地址在两种情况下起作用。这些是(1)来自运行容器的同一 Linux 主机的控制台,以及(2)在同一 Docker 网络上的容器之间。它们确实不适用于其他主机,或者在 MacOS 或 Windows 主机上。上述方法没有这些限制,并且在容器被删除和重新创建时容器私有 IP 地址发生变化等情况下仍然有效。)

【讨论】:

  • 谢谢@David Maze 根据您的建议工作得很好
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多