首页 > 解决方案 > Docker Swarm 中的容器和节点 IP 地址

问题描述

我正在阅读 Docker 教程,我有点困惑为什么容器的 IP 地址可能与集群中包含它们的节点不同。我的困惑是基于下图,来自本教程的这个页面

在此处输入图像描述

较大的绿色框是 swarm 中的节点;他们每个人都有自己的 IP 和负载均衡器,并且在外部他们正在侦听端口 8080。我相信黄色框是my-web服务中的容器/任务。他们正在侦听端口 80,我猜该服务已设置为将每个容器的端口 80 映射到外部端口 8080。

我或多或少地理解了这一点,但我不明白为什么容器/任务将具有/需要与其运行的节点不同的 IP 地址。有人可以解释一下吗?

如果我不得不猜测,那将是因为每个容器基本上都是一个 VM,并且 VM 需要自己的 IP 地址,并且没有两个 VM 可以具有相同的 IP 地址,因此容器不能具有与节点相同的 IP。但我不确定这种解释是否正确。

标签: dockerdocker-swarm

解决方案


我自己对 docker/containers 还是很陌生,但据我了解,您指的是内部 IP 和外部 IP。也就是说,这192.168.99.100-102将是外部可寻址的(又名公开可用的),而该10.0.0.1-2地址仅用于内部寻址。

内部寻址的原因是您可以为容器使用更大的 IP 地址池,这就是使用10.0.0.0/8地址空间的原因。这些节点仍然需要可寻址,以便您的负载均衡器可以正确分配负载。根据维基百科的条目,你有16,777,216可用的 IP,如果你需要,你的 swarm 可以扩展到许多容器。而您只有有限数量的外部 IP 地址可供您的服务使用。


推荐阅读