无法将节点加入 docker 群
Fail join node to docker swarm
我在 Docker Swarm 中有两台服务器,但是当我需要添加第三台服务器时 - 我得到的结果是:
Error response from daemon: rpc error: code = 14 desc = grpc: the
connection is unavailable
一个网络中的所有服务器。
可能是什么问题?
我想这可能与防火墙有关。确保您的端口在第三个框中正确配置。来自 Docker docs:
Open protocols and ports between the hosts The following ports must be
available. On some systems, these ports are open by default.
TCP port 2377 for cluster management communications TCP and UDP port
7946 for communication among nodes UDP port 4789 for overlay network
traffic
必须在您的 docker 主机上打开以下端口。
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
要在所有 docker 主机上启用此端口 运行,请执行以下命令。
请按照 digitalocen article 完成步骤。
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
来自 official docs 的更简单的一个:
重新初始化集群管理器:
- 用
docker swarm leave --force
消灭虫群
- 重新初始化
docker swarm init --advertise-addr [ip of the machine, check it with 'docker-machine ls']:2377
(2377
是 the port for swarm joins)
然后使用 docker-machine ssh myvm2 "docker swarm join \
--token <token> \
<ip>:<port>"
将您的机器添加到群中
正如其他人所指出的,关闭端口可能是原因之一。但我还发现了更多。
Docker 的最新版本存在大量代理问题:
- https://github.com/moby/moby/issues/34825
- https://github.com/moby/moby/issues/34996
- https://github.com/moby/moby/issues/35046
- https://github.com/moby/moby/issues/35395
根据 this comment,修复 "likely" 使其成为 Docker 版本 17.11
并且 "considered" 放入补丁17.09
.
发布
我的所有端口都已打开,并且上述链接中描述的 NO_PROXY
破解无效。
我尝试了 17.05
到 17.11.0-ce-rc3, build 5b4af4f
之间的所有 Docker 版本,但都没有成功,这让我怀疑罪魁祸首可能是最近升级的 Vagrant(我正在使用2.0.1
) and/or VirtualBox(使用 5.1.30
)。升级这两者中的任何一个通常会导致各种随机问题。但是,我没有降级这些人,而是尝试升级我 运行.
的 Vagrant 盒子
在我的双机设置中,我将第一个节点的框切换为fso/artful64-desktop
and the second node's box to fso/artful64
(both version 2017-11-01
). To my surprise, this made Docker Swarm work on version 17.10.0-ce
and 17.11.0-ce-rc3, build 5b4af4f
. Please note that private networking is broken on Vagrant 2.0.1
if you want to use Ubuntu 17.10 boxes lol (can be manually fixed)。
我们遇到的错误消息并不完全相同,但非常相似:
Error response from daemon: rpc error: code = Unavailable desc = grpc:
the connection is unavailable
在我们的例子中,我们将代理设置添加到 docker 守护程序,以便从我们的公司代理后面访问 docker 中心图像。
因此,当尝试 docker swarm join 一个 worker 到 manager 时,它转而去了代理。
解决方法:
将 swarm 管理器添加到 docker 守护程序 NO_PROXY 环境变量中,一切顺利。 This answer 告诉你怎么做。
通过刷新 iptables 暂时解决了,但这是个坏主意!
在那之后,克隆图像不起作用,因为它没有找到合适的 iptables 链 "docker"。
确实是FW的问题,但更确切地说是firewalld (centos7).
通过允许适当的端口通过 firewalld 解决了问题,如 :
所述
@sanjaykumar81 回答。
有关它的更多信息,请访问 Docker 论坛
正如其他人提到的,向 firewalld 添加一个额外的端口可以解决问题
sudo firewall-cmd --add-port=2376/tcp --permanent
sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent
打开端口后记得重启防火墙
sudo firewall-cmd --add-port=2376/tcp --permanent
sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent
sudo systemctl restart firewalld
确保 systemd 机器中的 firewalld 允许 docker 文档中提到的端口:
以下端口必须可用。在某些系统上,这些端口默认打开。
用于集群管理通信的 TCP 端口 2377
用于节点间通信的 TCP 和 UDP 端口 7946
覆盖网络流量的 UDP 端口 4789
确保启用了适当的 TCP/UDP 端口
错误:desc =“传输:x509:证书已过期或尚未生效”
在某些时候,由于领导者和工作节点之间的时间不同步,可能会出现此错误。使用 chronyd / ntpd 可以解决这个问题。
我在 Docker Swarm 中有两台服务器,但是当我需要添加第三台服务器时 - 我得到的结果是:
Error response from daemon: rpc error: code = 14 desc = grpc: the connection is unavailable
一个网络中的所有服务器。
可能是什么问题?
我想这可能与防火墙有关。确保您的端口在第三个框中正确配置。来自 Docker docs:
Open protocols and ports between the hosts The following ports must be available. On some systems, these ports are open by default.
TCP port 2377 for cluster management communications TCP and UDP port 7946 for communication among nodes UDP port 4789 for overlay network traffic
必须在您的 docker 主机上打开以下端口。
TCP port 2377 for cluster management communications
TCP and UDP port 7946 for communication among nodes
UDP port 4789 for overlay network traffic
要在所有 docker 主机上启用此端口 运行,请执行以下命令。 请按照 digitalocen article 完成步骤。
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
来自 official docs 的更简单的一个:
重新初始化集群管理器:
- 用
docker swarm leave --force
消灭虫群
- 重新初始化
docker swarm init --advertise-addr [ip of the machine, check it with 'docker-machine ls']:2377
(2377
是 the port for swarm joins)
- 用
然后使用
docker-machine ssh myvm2 "docker swarm join \ --token <token> \ <ip>:<port>"
将您的机器添加到群中
正如其他人所指出的,关闭端口可能是原因之一。但我还发现了更多。
Docker 的最新版本存在大量代理问题:
- https://github.com/moby/moby/issues/34825
- https://github.com/moby/moby/issues/34996
- https://github.com/moby/moby/issues/35046
- https://github.com/moby/moby/issues/35395
根据 this comment,修复 "likely" 使其成为 Docker 版本 17.11
并且 "considered" 放入补丁17.09
.
我的所有端口都已打开,并且上述链接中描述的 NO_PROXY
破解无效。
我尝试了 17.05
到 17.11.0-ce-rc3, build 5b4af4f
之间的所有 Docker 版本,但都没有成功,这让我怀疑罪魁祸首可能是最近升级的 Vagrant(我正在使用2.0.1
) and/or VirtualBox(使用 5.1.30
)。升级这两者中的任何一个通常会导致各种随机问题。但是,我没有降级这些人,而是尝试升级我 运行.
在我的双机设置中,我将第一个节点的框切换为fso/artful64-desktop
and the second node's box to fso/artful64
(both version 2017-11-01
). To my surprise, this made Docker Swarm work on version 17.10.0-ce
and 17.11.0-ce-rc3, build 5b4af4f
. Please note that private networking is broken on Vagrant 2.0.1
if you want to use Ubuntu 17.10 boxes lol (can be manually fixed)。
我们遇到的错误消息并不完全相同,但非常相似:
Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable
在我们的例子中,我们将代理设置添加到 docker 守护程序,以便从我们的公司代理后面访问 docker 中心图像。 因此,当尝试 docker swarm join 一个 worker 到 manager 时,它转而去了代理。
解决方法: 将 swarm 管理器添加到 docker 守护程序 NO_PROXY 环境变量中,一切顺利。 This answer 告诉你怎么做。
通过刷新 iptables 暂时解决了,但这是个坏主意! 在那之后,克隆图像不起作用,因为它没有找到合适的 iptables 链 "docker"。
确实是FW的问题,但更确切地说是firewalld (centos7).
通过允许适当的端口通过 firewalld 解决了问题,如 :
所述
@sanjaykumar81 回答。
有关它的更多信息,请访问 Docker 论坛
正如其他人提到的,向 firewalld 添加一个额外的端口可以解决问题
sudo firewall-cmd --add-port=2376/tcp --permanent
sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent
打开端口后记得重启防火墙
sudo firewall-cmd --add-port=2376/tcp --permanent
sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent
sudo systemctl restart firewalld
确保 systemd 机器中的 firewalld 允许 docker 文档中提到的端口:
以下端口必须可用。在某些系统上,这些端口默认打开。
用于集群管理通信的 TCP 端口 2377 用于节点间通信的 TCP 和 UDP 端口 7946 覆盖网络流量的 UDP 端口 4789
确保启用了适当的 TCP/UDP 端口
错误:desc =“传输:x509:证书已过期或尚未生效”
在某些时候,由于领导者和工作节点之间的时间不同步,可能会出现此错误。使用 chronyd / ntpd 可以解决这个问题。