docker - 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 时,我得到了与上面相同的错误。
我还在两台机器上禁用了防火墙,但没有任何效果
解决方案
您需要使用主机的 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
推荐阅读
- sql - SQL - 比较两个不同表中的值?
- php - 是否有必要在 firebase 和服务器中使用身份验证令牌
- swift - 将 NSTableView 列标题绑定到数组
- regex - 正则表达式 - 匹配 URL 路径但排除最后的斜杠(如果存在)
- c# - 从使用资源文件的类属性中获取本地化的显示名称属性
- vue.js - 在 vuejs 中生成动态表
- javascript -
- python - Django:重定向视图并使用 include()
- javascript - 在 foreach 循环中的表格单元格中插入模态
- python - Python-重新格式化文本文件,从零碎的句子中创建完整的句子