我正在使用 Docker CE 19.03 和三台 CentOS 7 机器创建一个 3 管理器 Docker Swarm。
我已经通过 yum 安装了 docker,启用了服务并启动了它。
我已经创建了一个防火墙“服务”并允许(根据docker文档):
- TCP 端口 2377 用于集群管理通信
- TCP 和 UDP 端口 7946 用于节点之间的通信
- UDP 端口 4789 用于覆盖网络流量
我能够初始化 Swarm 并加入一个工作服务器。然而,我尝试以管理者身份加入第三台服务器,但失败了
守护进程的错误响应:管理器已停止:无法初始化 Raft 节点:rpc 错误:代码 = 未知 desc = 无法使用其公布的地址连接到潜在的新集群成员:rpc 错误:代码 = DeadlineExceeded desc = 超出上下文截止时间
所以我退出docker swarm leave
并尝试以工人身份加入。成功了,没有问题。那么为什么我以经理身份加入会失败,而以工人身份加入会成功呢?
我尝试允许 2376/tcp(每https://www.digitalocean.com/community/tutorials/how-to-configure-the-linux-firewall-for-docker-swarm-on-centos-7) 并在一个管理器上禁用firewalld以查看是否是防火墙问题,但我收到了同样的错误。
答案1
所以,吸取教训,相信错误信息。
我应用了防火墙服务模板,但忘记重新加载防火墙,因此端口实际上并未打开。显然,所有这些端口实际上都不是作为工作者加入所必需的,而是作为经理加入所必需的。
我注意到,在我的负载均衡器中,我的容器经常在该主机上显示为失败,但事实并非如此,这导致我仔细检查所有内容。
答案2
swarm token 有默认的使用期限,可以重新创建 token 来加入