如何在主机网络内 ping Docker-Container?

nai*_*ail 6 containers host ping remote-access docker

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

因此,到目前为止,我创建了指定名称和网络标志的容器,如许多教程中所述,例如:https: //www.digitalocean.com/community/questions/how-to-ping-docker-container-from-another-container-按名字

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

docker run -d --name web1  -n testnetwork
docker run -d --name web2  -n testnetwork
Run Code Online (Sandbox Code Playgroud)

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

docker exec -it web1 bash # enter container
ping web2 #ping second container
Run Code Online (Sandbox Code Playgroud)

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

但我似乎无法再互相 ping 通我的容器了。我也无法使用容器的名称从主机对容器执行 ping 操作。

我是不是忽略了什么?

任何帮助,将不胜感激!此致

Dav*_*aze 8

如果你设置了--network host,你基本上就禁用了 Docker 的整个网络堆栈。除此之外,这会禁用正常的容器间通信:如果您使用主机网络,则无法通过名称调用另一个容器。主机网络很少需要(并且在某些主机平台上不能很好地工作);我要考虑的第一件事是您是否可以切换回标准(桥接)网络。

如果您确实使用 运行容器--network host,则它与该主机上运行的其他进程无法区分。这意味着您无法直接向其发送 ICMP 数据包,就像您无法ping (1) ssh 守护程序或 Web 浏览器一样。您需要使用主机的 IP 地址或 DNS 名称连接到容器,即使是从同一主机上的其他容器也是如此。 从 Docker 容器内部,如何连接到机器的本地主机?讨论了实现此目的的几种方法。

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