>我使用 docker 堆栈部署在 2 个节点上创建了 3 个服务
我查看了一个服务,首先在容器内
它有3个不同子网的IP地址
ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0a:00:02:05
inet addr:10.0.2.5 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:141427 errors:0 dropped:0 overruns:0 frame:0
TX packets:90456 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:16495496 (15.7 MiB) TX bytes:62287111 (59.4 MiB)
eth1 Link encap:Ethernet HWaddr 02:42:ac:13:00:03
inet addr:172.19.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:355 (355.0 B) TX bytes:230 (230.0 B)
eth2 Link encap:Ethernet HWaddr 02:42:0a:ff:00:07
inet addr:10.255.0.7 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1
RX packets:253 errors:0 dropped:0 overruns:0 frame:0
TX packets:233 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:16484 (16.0 KiB) TX bytes:17135 (16.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:1050 (1.0 KiB) TX bytes:1050 (1.0 KiB)
但它们都与我从 docker Service Inspection 获得的不同
"VirtualIPs": [
{
"NetworkID": "u0n4343zozic7awn0985441pd",
"Addr": "10.255.0.6/16"
},
{
"NetworkID": "mi1l10o7ysnv5jipp8c9wyrvr",
"Addr": "10.0.2.4/24"
}
]
所以我的问题是为什么容器有 3 个 IP,它们做什么? 还有虚拟IP代表什么?它们的用途是什么?
好的,我想您在堆栈中还配置了一个覆盖网络?那么它将是以下内容:
eth0:是覆盖网络上的容器 IP 地址 - 这是因为为您的服务创建的 Docker 网络也将具有 CIDR 掩码。您可以通过针对服务任务的 nslookup 解析容器:"nslookup 任务"。
eth1:是来自 docker 引擎的 docker 主机的 iptables 链接 IP 地址。
eth2:我的猜测是,例如,这个来自Weave网络 - 您是否曾经安装过另一个像Weave这样的第三方覆盖网络?如果是,请将其删除,例如运行weave reset
。
对于虚拟IP:如果您启动包含覆盖网络的堆栈服务,您的服务将收到一个虚拟IP地址 - 我想也是编织。阅读更多内容,请访问 https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Designing_Scalable%2C_Portable_Docker_Container_Networks
从链接的 Docker 页面:
myservice 解析为该服务的虚拟 IP (VIP(,即 内部负载平衡到各个任务 IP 地址。 容器名称也可以解析,尽管直接解析为其 IP 地址。
因此,您可以 nslookup 并将获得虚拟 ip。一般,这是一个高级主题,您必须在其中阅读很多有关它的信息。