Windows 容器是否支持多节点 Swarm

Do Windows Containers Support Multi-node Swarm

我按照这篇文章 https://docs.docker.com/ee/docker-ee/windows/docker-ee/

在 windows 服务器 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 但是我得到了下面的错误 *

Error response from daemon: manager stopped: failed to listen on remote API address: listen tcp 192.168.192.245:2377: bind: The requested address is not valid in its context.

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

docker network inspect nat

以下是结果

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

我尝试做但失败的另一件事是初始化 swarm 并使用 docker window 范围内的 IP 地址,但我遇到了同样的问题

再次编辑:

现在可以使用 IP:Port 192.168.192.243:2377 并且能够添加第一个 hyper-v VM 作为管理器节点,但如您所见,另一台机器无法加入集群。我注意到当我添加 --listen-addr 192.168.192.243:2377 时,我得到了与上面相同的错误。

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

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

advertise-addr,这是向其他节点通告的网络地址(它们将使用该地址连接到集群)。

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

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