将连接节点失败到docker swarm

时间:2017-04-12 13:24:33

标签: docker docker-swarm

我在Docker Swarm中有两台服务器,但是当我需要添加第三台服务器时 - 我得到了结果:

  

来自守护程序的错误响应:rpc错误:code = 14 desc = grpc:the   连接不可用

一个网络中的所有服务器。

可能是什么问题?

9 个答案:

答案 0 :(得分:3)

我说它可能与防火墙有关。确保在第三个框中正确配置了端口。来自Docker docs

  

主机之间的开放协议和端口必须具有以下端口   可用。在某些系统上,默认情况下这些端口是打开的。

     

TCP端口2377,用于群集管理通信TCP和UDP端口   7946用于节点之间的通信UDP端口4789用于覆盖网络   流量

答案 1 :(得分:2)

来自官方Docker swarm tutorial

必须在泊坞主机上打开以下端口。

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-ce17.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论坛

https://forums.docker.com/t/error-response-from-daemon-rpc-error-code-unavailable-desc-grpc-the-connection-is-unavailable/39066

正如其他人提到的那样,向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的更容易:

  1. 重新启动swarm管理器:

    • 使用docker swarm leave --force
    • 取下群组
    • 使用docker swarm init --advertise-addr [ip of the machine, check it with 'docker-machine ls']:23772377the port for swarm joins
    • 重新初始化
  2. 然后使用docker-machine ssh myvm2 "docker swarm join \ --token <token> \ <ip>:<port>"

  3. 将您的计算机添加到群组中

答案 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可以解决此问题。

enter link description here