【问题标题】:Ping Docker Container from another machine in the network从网络中的另一台机器 Ping Docker 容器
【发布时间】:2014-06-10 19:04:07
【问题描述】:

我创建了一个 docker 容器并尝试在容器的 bash 中 ping www.google.com 并且它可以工作。我还尝试从主机 ping 容器 - 它工作得非常好。

但是当我尝试从网络中的外部系统 ping 容器时,它给了我一个请求超时异常。

我打算在一个容器上安装一个tomcat webserver,并允许其他容器访问部署在服务器中的应用程序。不胜感激!

【问题讨论】:

    标签: networking ping docker


    【解决方案1】:

    默认情况下,您无法从外部主机 ping Docker 容器(为此,您必须确保 Docker 网桥 -docker0- 具有 IP 地址,并且您必须在其他主机上配置路由以使用您的 Docker 主机作为网桥地址范围的网关)。

    默认情况下,在 Docker 容器内运行的任何服务都不是“已发布”(Docker 术语),并且无法从外部访问。您必须在运行容器时明确定义/允许要发布的服务。

    例如,要将容器的 Tomcat 应用程序(假设它配置为侦听端口 8080)发布到主机上的端口 80,您可以使用以下命令运行容器-p 选项:

    docker run -d -p 80:8080 my-tomcat-image:tag

    但是如果你只想从同一主机上的其他容器访问Tomcat,你不需要配置任何东西。

    【讨论】:

    • 尝试添加从 host1 到 host2 内的 docker 容器网络的路由。这可能吗?我尝试使用 172.17.x.x(host2 上的 docker 网络)在 host1 上添加静态路由,并将网关作为 host2。我没有收到任何数据包到host2。有什么我需要调查的吗? 172.17.0.0 172.31.69.211 255.255.0.0 UG 0 0 0 eth0是host1上指向host2 ip地址的路由。
    【解决方案2】:

    有一种方法可以做到这一点,而无需在其他主机上配置路由,至少使用 Podman,不确定 Docker。 您可以为此使用 CNI 插件 ipvlan

    {
      "cniVersion": "0.4.0",
      "name": "podman",
      "plugins": [
        {
          "type": "ipvlan",
          "master": "baremetal",
          "bridge": "cni-podman0",
          "isGateway": false,
          "isDefaultGateway": false,
          "ipMasq": false,
          "hairpinMode": false,
          "promiscMode": true,
          "ipam": {
            "type": "host-local",
            "ranges": [
              [
                {
                  "subnet": "192.168.216.0/21"
                }
              ]
            ]
          }
        }
      ]
    }
    

    然后您只需在子网中创建具有 IP 的容器(我假设 192.168.216.0/21 是您网络中外部系统的子网):

    podman run --ip 192.168.216.201 -d quay.io/frrouting/frr
    

    可以从您的外部系统访问此容器(但不能通过运行容器的主机)。

    【讨论】:

      【解决方案3】:

      我在 windows 10 中安装了 docker 桌面。我在从 windows 10 ping 容器时遇到了类似的挑战。由于 docker 主机无法访问 linux 容器(Known limitations, use cases, and workarounds),这是一种访问容器 ip 的方法。我们可以通过 vEthernet WSL ip ping 到 Docker Gateway 到 Container ip。

      解决方案:

      1. 在主机命令提示符中键入“ipconfig /all”。
      2. 找到“以太网适配器 vEthernet (WSL)”的 ip

      vEthernet (WSL) ip

      Containers running:

      Ping thru vEthernet (WSL) ip

      与上述类似,其他容器也正在从 Windows 10 ping。

      希望这对 Windows 用户有所帮助。

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      • 我编辑的内容有点清晰。
      猜你喜欢
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多