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

问题描述

我正在使用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)容器似乎没什么用。)>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...