首页 > 解决方案 > Windows 容器是否支持多节点 Swarm

问题描述

我按照这篇文章https://docs.docker.com/ee/docker-ee/windows/docker-ee/在 Windows Server 2016 上手动设置了 docker

我有两台 windows server 2016 hyper-v 机器共享同一个网络,我添加了防火墙规则以允许彼此之间的网络连接。

第一台机器拥有私有IP 192.168.192.254,另一台拥有私有IP 192.168.192.242,它们可以互相ping通。

我尝试在第一台机器上初始化 swarm 并使用以下命令 docker swarm init --advertise-addr 192.168.192.245:2377 --listen-addr 192.168.192.245:2377,但出现以下错误 *

来自守护进程的错误响应:管理器停止:无法侦听远程 API 地址:侦听 tcp 192.168.192.245:2377:绑定:请求的地址在其上下文中无效。

* 然后我执行了下面的命令

docker network inspect nat

下面是结果 在此处输入图像描述

看起来 docker 有自己的接口,并且它的网络 IP 与 hyper-v 默认开关不同!这意味着两台机器上的两个docker都不知道如何相互通信,如果我的理解是正确的,我该如何构建多节点集群呢?

我尝试做但失败的另一件事是初始化 swarm 并使用 docker 窗口范围内的 IP 地址,但我遇到了同样的问题 在此处输入图像描述

再次编辑:

现在它使用这个 IP:端口192.168.192.243:2377并且能够将第一个 hyper-v 虚拟机添加为管理器节点,但是正如您所看到的,另一台机器无法加入集群。我注意到当我添加 --listen-addr 192.168.192.243:2377 时,我得到了与上面相同的错误。

我还在两台机器上禁用了防火墙,但没有任何效果

在此处输入图像描述

标签: dockerwindows-server-2016swarmdocker-network

解决方案


您需要使用主机的 IP 地址之一,listen-addr因为顾名思义,它将尝试侦听该 IP 地址。

advertise-addr也是向其他节点通告的网络地址(他们将使用该地址连接到 swarm)。

在大多数设置中,这两者是相同的,但在某些情况下它们是不同的(例如,主机multiple network cards可能只希望集群可以在 a 中访问single network,或者通过互连的主机VPN可能希望集群只通过 通信VPN interface)。
理论上,您可以在接口后面有一个群管理器,NAT在这种情况下,advertise-addr 将是 NAT 设备的管理器(我只是在推测 NAT 的情况——我还没有尝试过)。

无论如何,使用此初始化命令应该适用于您的情况:
docker swarm init --advertise-addr 192.168.192.242


推荐阅读