【问题标题】:Can not ping docker container from another host which is in the same LAN无法从同一 LAN 中的另一台主机 ping docker 容器
【发布时间】:2017-04-02 09:23:18
【问题描述】:

我有两台主机,在同一个局域网中,都在运行 docker:

  • 主机A:172.16.0.113
  • 主机B:172.16.0.114

我可以从主机 B ping 主机 A。但是,我无法从主机 B ping 主机 A 上的 docker 容器。

我在 docker 默认网络(网桥)中创建了一个运行 ubuntu 的 docker 容器。默认 docker0 的 IP 地址是 172.17.0.1。而宿主机(172.16.0.113)中容器(ubuntu)的IP地址为172.17.0.2。我使用的命令在这里:

sudo docker run --name container01 -it -p 8080:80 ubuntu /bin/bash

我可以从它的主机主机 A ping container01;但我无法从另一台主机(主机 B)ping container01。请注意,我已经暴露了 container01 的端口。

我认为当我从主机 B ping container01 时,数据包会发送到该主机中的容器。但是我想知道如何从主机B连接到主机A的container01。

【问题讨论】:

  • 请记住ping对ports不起作用,因此暴露8080端口不会影响您是否可以ping另一个容器。
  • 非常感谢。

标签: linux ubuntu networking docker


【解决方案1】:

不妨试试

sudo docker run --name container01 -it --network=host -p 8080:80 ubuntu /bin/bash

【讨论】:

    【解决方案2】:

    Docker 容器在通常无法从其他主机访问的私有地址上运行。如果你有多个 docker 主机,那么你应该设置overlay networking 将容器放在同一个私有网络上,以便它们可以相互访问;这可以通过swarm mode 自动完成。

    要从 docker 外部访问容器,您需要发布一个端口。使用 docker run 时,-p 8080:80 选项会将主机端口 8080 映射到容器端口 80(您可以调整这些端口号)。使用 docker-compose.yml,有一个类似的 ports 部分。

    【讨论】:

    • 我在主机 A 和 B 上使用了 swarm 模式。我创建了一个名为 my-multi-host-network 的覆盖网络。命令是: sudo docker service create --name my_web --network my-multi-host-network --publish 8008:80 --replicas 10 nginx 然后它在主机 A 和 B 上创建了 10 个 nginx 容器。 my_web 的 IP 地址.1 是 172.16.1.3。当我 ping 172.16.1.3 时,仍然无法从主机 B 连接主机 A 上的容器 my_web.1。那么主机 B 可以访问主机 A 上的容器吗?
    • 容器可以使用覆盖网络,容器到容器相互访问。您不会直接在容器 ip 上从外部主机转到容器。相反,您可以使用主机上的已发布端口访问它。 8008,在任一主机上都会循环路由到其中一个容器。
    • 那么,如果我不使用ping命令测试连通性,我应该使用什么命令来测试主机A和主机B上的容器之间的连通性?
    • 可以ping,但是从容器到容器,不能从远程主机到容器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-12
    • 2016-11-21
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多