我想将容器ip暴露给运行主机的外部网络,以便我可以直接从外部计算机ping docker容器ip。如果我从托管Docker的机器和我正在ping的机器在同一网络中的外部机器上ping docker container ip,我需要从这些机器获得响应
从另一台机器ping容器的IP(即,当您查看docker inspect [CONTAINER]
时显示的IP)不起作用。但是,可以通过其主机的公共IP访问容器。
除了Borja的回答,您可以通过将-p [HOST_PORT]:[CONTAINER_PORT]
添加到docker run
命令来公开Docker容器的端口。
例如。如果要从另一台计算机访问Docker容器中的Web服务器,可以使用docker run -d -p 80:80 httpd:alpine
启动它。然后可以通过主机端口80
访问容器的端口80
。然后,同一网络上的其他计算机也可以访问此容器中的Web服务器(当然,取决于防火墙设置等...)
由于您将此标记为kubernetes:
您无法直接将数据包发送到各个Docker容器。您需要将它们发送到能够路由它们的其他地方。对于普通Docker,您需要使用docker run -p
选项将端口发布到主机,然后可以通过主机的IP地址或DNS名称通过发布的端口访问容器。在Kubernetes上下文中,您需要设置一个服务,该服务能够将流量路由到运行容器的Pod(或Pod),并最终通过该服务访问容器。
在许多情况下,容器内部IP地址基本上是无用的。 (根本不能从离开主机访问它们;在某些环境中,您甚至无法从同一主机上的Docker外部访问它们。)您可以使用其他机制来访问容器(来自Docker外部的docker run -p
,来自Docker的容器DNS)你根本不需要查找这些IP地址。
你的问题非常强调ping(1)。这是一个非常低级的调试工具,它使用名为ICMP的网络协议。如果使用ICMP发送数据包实际上是您工作流程的核心,那么在Docker或Kubernetes中运行它将会很困难。我怀疑你实际上并不是。不要太担心能够直接ping容器;如果需要验证请求是否到达其容器,请使用curl(1)等更高级别的工具。