如何将docker容器ip暴露给外部网络?

时间:2019-04-25 12:27:18

标签: docker networking kubernetes

我想将容器ip暴露给主机正在运行的外部网络,以便我可以直接从外部计算机ping docker容器ip。 如果我从托管docker的计算机和要ping的计算机位于同一网络中的外部计算机ping docker容器ip,则需要从这些计算机获取响应

2 个答案:

答案 0 :(得分:0)

无法从另一台计算机上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服务器(当然,这取决于防火墙设置等)

答案 1 :(得分:0)

由于您将其标记为

您不能直接将数据包发送到各个Docker容器。您需要将它们发送到其他能够路由它们的地方。对于普通Docker,您需要使用docker run -p选项将端口发布到主机,然后可以通过已发布的端口通过主机的IP地址或DNS名称访问容器。在Kubernetes上下文中,您需要设置一个服务,该服务能够将流量路由到运行容器的Pod(一个或多个Pod),并最终通过该Service到达容器。

在许多情况下,容器内部IP地址实际上是无用的。 (它们根本无法从脱离主机的位置访问;在某些环境中,甚至无法从同一主机上的Docker外部访问它们。)还有其他机制可用于从外部访问容器(docker run -p Docker,即来自Docker的容器间DNS),您根本不需要查找这些IP地址。

您的问题非常重视 ping (1)。这是一个非常底层的调试工具,它使用称为ICMP的网络协议。如果使用ICMP发送数据包实际上是您工作流程的核心,那么您将很难在Docker或Kubernetes中运行它。我怀疑你实际上不是。不必太担心能够直接ping容器;如果需要验证请求是否已到达其容器,请使用 curl (1)之类的高级工具。