我在Docker Swarm中有两台服务器,但是当我需要添加第三台服务器时 - 我得到了结果:
来自守护程序的错误响应:rpc错误:code = 14 desc = grpc:the 连接不可用
一个网络中的所有服务器。
可能是什么问题?
答案 0 :(得分:3)
我说它可能与防火墙有关。确保在第三个框中正确配置了端口。来自Docker docs:
主机之间的开放协议和端口必须具有以下端口 可用。在某些系统上,默认情况下这些端口是打开的。
TCP端口2377,用于群集管理通信TCP和UDP端口 7946用于节点之间的通信UDP端口4789用于覆盖网络 流量
答案 1 :(得分:2)
必须在泊坞主机上打开以下端口。
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
答案 2 :(得分:1)
正如其他人所指出的那样,封闭的港口可能是其中一个原因。但我还发现了其他几个。
最近版本的Docker遭遇了大量代理问题:
根据this comment,解决方案是"可能"使其成为Docker版本17.11
,它被认为是#34;要放入17.09
的补丁版本。
我的所有端口都已打开,上述链接中描述的NO_PROXY
黑客无效。
我在17.05
之间尝试了所有Docker版本,一直到17.11.0-ce-rc3, build 5b4af4f
没有成功,这让我怀疑罪魁祸首可能是Vagrant最近的升级(我正在使用2.0.1
)和/或VirtualBox(使用5.1.30
)。升级这两者中的任何一个通常会导致各种随机问题。但是,我试图升级我运行的Vagrant盒子而不是降级这些家伙。
在我的双机设置中,我将第一个节点的框切换到fso/artful64-desktop
,将第二个节点的框切换到fso/artful64
(版本2017-11-01
) 。令我惊讶的是,这使Docker Swarm在版本17.10.0-ce
和17.11.0-ce-rc3, build 5b4af4f
上工作。请注意,如果您想使用Ubuntu 17.10框lol(可以是manually fixed),Vagrant 2.0.1
上的专用网络会被破坏。
答案 3 :(得分:1)
我们遇到的错误信息并不完全相同,但非常相似:
来自守护程序的错误响应:rpc错误:code = Unavailable desc = grpc: 连接不可用
在我们的案例中,我们将代理设置添加到docker守护程序,以便从我们的公司代理后面访问docker hub映像。 因此,当试图将一个工作者加入到管理器中时,它会转到代理服务器。
解决方案: 将swarm管理器添加到docker守护程序NO_PROXY环境变量中,你就可以了。 This answer告诉你如何。
答案 4 :(得分:1)
有关它的更多信息,请访问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
答案 5 :(得分:0)
来自official docs的更容易:
重新启动swarm管理器:
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>"
答案 6 :(得分:0)
暂时通过刷新 iptables 解决了,但这是一个坏主意!! 之后,克隆图像不起作用,因为它没有找到合适的iptables链“docker”。
这确实是一个FW问题,但更确切地说是 firewalld (centos7)。
通过firewalld允许适当的端口来解决问题,如下所述:
@ sanjaykumar81回答。
答案 7 :(得分:0)
记住打开端口后重新启动防火墙
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
答案 8 :(得分:0)
确保systemd机器中的firewalld允许使用docker docs中提到的端口:
以下端口必须可用。在某些系统上,这些端口默认情况下处于打开状态。
用于群集管理通信的TCP端口2377 TCP和UDP端口7946,用于节点之间的通信 UDP端口4789,用于覆盖网络流量
确保已启用适当的TCP / UDP端口
错误:desc =“传输:x509:证书已过期或尚未生效”
在某些时间,由于领导者和工作者节点之间的时间不同步,因此可以看到此错误。使用chronyd / ntpd可以解决此问题。