繁体   English   中英

将节点加入 docker swarm 失败

[英]Fail join node to docker swarm

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

来自守护进程的错误响应:rpc 错误:代码 = 14 desc = grpc:连接不可用

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

可能是什么问题呢?

我会说这可能与防火墙有关。 确保在第三个盒子上正确配置了您的端口。 来自Docker 文档

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

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

来自官方Docker swarm 教程

以下端口必须在您的 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 文章了解完整步骤。

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

正如其他人指出的那样,关闭端口可能是原因之一。 但我还发现了更多。

最新版本的 Docker 存在大量代理问题:

根据此评论,该修复“可能”使其成为 Docker 版本17.11并且“考虑”将其放入17.09的补丁版本中。

我所有的端口都打开了,并且上述链接中描述的NO_PROXY hack 不起作用。

我尝试了17.0517.11.0-ce-rc3, build 5b4af4f之间的所有 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版本上工作17.11.0-ce-rc3, build 5b4af4f 请注意,如果您想使用 Ubuntu 17.10 机器(可以手动修复),Vagrant 2.0.1上的私有网络会损坏。

我们面临的错误消息并不完全相同,但非常相似:

来自守护进程的错误响应:rpc 错误:代码 = 不可用 desc = grpc:连接不可用

在我们的例子中,我们向 docker 守护进程添加了代理设置,以便从我们的公司代理后面访问 docker hub 图像。 因此,当尝试 docker swarm 将工作人员加入经理时,它转而转到代理。

解决方案:将 swarm 管理器添加到 docker 守护进程 NO_PROXY 环境变量中,您就可以开始了。 这个答案告诉你如何。

有关它的更多信息可在 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

打开端口后记得重启防火墙

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

来自官方文档的更简单的一个:

  1. 重新初始化群管理器:

    • docker swarm leave --force
    • 使用docker swarm init --advertise-addr [ip of the machine, check it with 'docker-machine ls']:2377重新初始化( 2377swarm 加入的端口
  2. 然后使用docker-machine ssh myvm2 "docker swarm join \\ --token <token> \\ <ip>:<port>"将您的机器添加到docker-machine ssh myvm2 "docker swarm join \\ --token <token> \\ <ip>:<port>"

通过刷新iptables临时解决了,但这是一个坏主意!! 之后,克隆图像不起作用,因为它没有找到合适的 iptables 链“docker”。

这确实是一个固件问题,但更准确地说是firewalld (centos7)。
通过允许适当的端口通过 firewalld 解决了该问题,如所述:
@sanjaykumar81 回答。

确保 systemd 机器中的 firewalld 允许 docker docs 中提到的端口:

以下端口必须可用。 在某些系统上,这些端口默认是打开的。

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

确保启用了适当的 TCP/UDP 端口

错误:desc =“传输:x509:证书已过期或尚未有效”

在某些时候,由于领导者和工作节点之间的时间不同步,可以看到此错误。 使用 chronyd / ntpd 可以解决这个问题。

在此处输入链接描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM