问题描述
我正在使用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
现在我必须使用一个仅在“主机”网络中运行的给定应用程序。要从我的其他容器访问此容器,它们必须位于同一网络(==“主机”)中。
但是似乎我再也无法互相ping通我的容器了。我也无法使用主机名从主机ping我的容器。
我忽略了什么吗?
任何帮助将不胜感激! 最好的问候
解决方法
如果设置--network host
,则基本上会禁用Docker的整个网络堆栈。除其他外,这将禁用正常的容器间通信:如果您使用的是主机网络,则无法通过其名称调用另一个容器。主机联网几乎是没有必要的(在某些主机平台上不能很好地工作);我首先要看的是您是否可以切换回标准(桥接)网络。
如果要做使用--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)容器似乎没什么用。)>