如何 ping Docker-主机网络内的容器?

How to ping Docker-Container inside host network?

我使用 Docker 容器有一段时间了,但不知道如何 ping docker 容器,它们是我的主机网络的一部分。

所以直到现在,我创建了指定名称和网络标志的容器,如许多教程中所述:https://www.digitalocean.com/community/questions/how-to-ping-docker-container-from-another-container-by-name

我可以在哪里创建网络,然后 运行 我在这些网络中的容器,例如:

docker run -d --name web1  -n testnetwork
docker run -d --name web2  -n testnetwork

这将使我能够通过以下方式相互 ping 我的容器:

docker exec -it web1 bash # enter container
ping web2 #ping second container

现在我必须使用给定的应用程序,目前它在“主机”网络中只有 运行s。要从我的其他容器访问此容器,它们必须在同一网络中(==“主机”)。

但似乎我无法再相互 ping 我的容器了。我也无法使用它们的名称从我的主机 ping 我的容器。

我是不是忽略了什么?

如有任何帮助,我们将不胜感激! 最好的问候

如果您设置 --network host,您基本上会禁用 Docker 的整个网络堆栈。除其他事项外,这会禁用正常的 inter-container 通信:如果您使用的是主机网络,则无法通过名称调用另一个容器。很少需要主机网络(并且在某些主机平台上运行不佳);我首先要看的是您是否可以切换回标准(桥接)网络。

如果您执行 运行 一个带有--network host 的容器,它与该主机上运行 的其他进程没有区别。这意味着您不能直接向它发送 ICMP 数据包,就像您不能 ping(1) 您的 ssh 守护程序或 Web 浏览器一样。您需要使用主机的 IP 地址或 DNS 名称连接到容器,即使是从同一主机上的其他容器。 From inside of a Docker container, how do I connect to the localhost of the machine? 讨论了执行此操作的几种方法。

(我认为当容器收到 ICMP ECHO 数据包时,您无法自定义 Docker 或 Linux 的行为;ping(1 ) 容器似乎没那么有用。)