我正在使用 Docker CE 19.03 和三台 CentOS 7 机器创建一个 3 管理器 Docker Swarm。
我已经通过 yum 安装了 docker,启用了服务并启动了它。
我创建了一个防火墙“服务”并允许(根据 docker 文档):
- 用于集群管理通信的 TCP 端口 2377
- TCP 和 UDP 端口 7946 用于节点之间的通信
- 覆盖网络流量的 UDP 端口 4789
我能够启动群并加入一个工人。但是,我尝试以经理身份加入的第三台服务器失败了
来自守护进程的错误响应:管理器停止:无法初始化 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一位经理查看这是否是防火墙问题,但我遇到了同样的错误。
所以,吸取教训,相信错误信息。
我已经应用了我的 firewalld 服务模板并且忘记重新加载 firewalld 所以端口实际上并没有打开。显然,所有这些端口实际上并不需要作为工人加入,而是作为经理加入。
我在负载均衡器中注意到,我的容器经常在该主机上显示为失败,而实际上并非如此,这导致我仔细检查了所有内容。
swarm token 有一个默认的时间限制。您可以再次创建令牌以加入