节点无法加入群集

问题描述:

我有3个虚拟机。他们都有docker 1.12,他们都在centos7上运行。 所有的端口都打开,并且虚拟机的能够ping海誓山盟 我开始了我的集群节点无法加入群集

docker swarm init --advertise-addr 192.168.140.12 

泊坞窗信息给我:

Swarm: active 
NodeID: 0drcj2nku1mv8t16fxva48edxx 
Is Manager: true 
ClusterID: cchn0yzospwoe1h9f55d7omxx 
Managers: 1 
Nodes: 1 

现在我尝试加入节点(其他虚拟机),以集群。我使用启动经理后推荐的命令。

docker swarm join \ 
    --token SWMTKN-1-48ythur5k6ckkz90ttlprw37p9z3ldclws51qirw5wdyfmvevr-3sb2t66b2fj6e4dhmfo1vavxx \ 
    192.168.140.12:2377 

但我得到:

Error response from daemon: Timeout was reached before node was joined. Attempt to join the cluster will continue in the background. Use "docker info" command to see the current swarm status of your node. 

泊坞窗信息给我:

Swarm: pending 
NodeID: 
Error: rpc error: code = 1 desc = context canceled 
Is Manager: false 
Node Address: 192.168.140.14 

集群经理:

# netstat -tulpn | grep docker 
tcp6  0  0 :::2377     :::*     LISTEN  1602/dockerd 
tcp6  0  0 :::7946     :::*     LISTEN  1602/dockerd 
tcp6  0  0 :::8080     :::*     LISTEN  3398/docker-proxy 
tcp6  0  0 :::32768    :::*     LISTEN  3199/docker-proxy 
tcp6  0  0 :::32769    :::*     LISTEN  3219/docker-proxy 
tcp6  0  0 :::32770    :::*     LISTEN  3341/docker-proxy 
tcp6  0  0 :::32771    :::*     LISTEN  3436/docker-proxy 
tcp6  0  0 :::2375     :::*     LISTEN  1602/dockerd 
udp6  0  0 :::7946     :::*        1602/dockerd 

我如何调试这个问题还是没有我忘了执行一些重要的步骤?服务器是否需要ssh访问对方?由于

日志节点:

Aug 8 09:50:24 localhost dockerd: time="2016-08-08T09:50:24.393432145-04:00" level=error msg="Handler for POST /v1.24/swarm/leave returned error: This node is not part of swarm" 
Aug 8 09:51:01 localhost su: (to root) worker1 on pts/1 
Aug 8 09:51:34 localhost dockerd: time="2016-08-08T09:51:34.384408514-04:00" level=error msg="Handler for POST /v1.24/swarm/join returned error: Timeout was reached before node was joined. Attempt to join the cluster will continue in the background. Use \"docker info\" command to see the current swarm status of your node." 
Aug 8 09:51:40 localhost su: (to root) worker1 on pts/1 
Aug 8 09:52:47 localhost dhclient[1277]: DHCPREQUEST on eno16777736 to 192.168.140.254 port 67 (xid=0x11f8fba8) 
Aug 8 09:52:47 localhost dhclient[1277]: DHCPACK from 192.168.140.254 (xid=0x11f8fba8) 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> address 192.168.140.13 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> plen 24 (255.255.255.0) 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> gateway 192.168.140.2 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> server identifier 192.168.140.254 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> lease time 1800 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> nameserver '192.168.140.2' 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> domain name 'localdomain' 
Aug 8 09:52:47 localhost NetworkManager[953]: <info> (eno16777736): DHCPv4 state changed bound -> bound 
Aug 8 09:52:47 localhost dbus[878]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' 
Aug 8 09:52:47 localhost dbus-daemon: dbus[878]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' 
Aug 8 09:52:47 localhost systemd: Starting Network Manager Script Dispatcher Service... 
Aug 8 09:52:47 localhost dhclient[1277]: bound to 192.168.140.13 -- renewal in 713 seconds. 
Aug 8 09:52:47 localhost dbus[878]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' 
Aug 8 09:52:47 localhost dbus-daemon: dbus[878]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher' 
Aug 8 09:52:47 localhost nm-dispatcher: Dispatching action 'dhcp4-change' for eno16777736 
Aug 8 09:52:47 localhost systemd: Started Network Manager Script Dispatcher Service. 

有时警告:

level=warning msg="failed to retrieve remote root CA certificate: rpc error: code = 1 desc = context canceled 
+0

ssh访问不需要。这些虚拟机之间是否有可能阻止端口2377流量的防火墙? – BMitch

+0

我执行'systemctl disable firewalld'因此防火墙不是我想的问题。 – DenCowboy

+0

当我执行泊坞窗信息时,我看到这个改变sometims:网络:空桥宿主覆盖,桥接主机覆盖null和返回。我的问题是否正常? – DenCowboy

我所有的虚拟机的主机名称分别为:的localhost.localdomain。 我在每台服务器上更改/etc/hosts的主机名并重新启动。 现在我可以创建我的群集并成功添加节点。

+1

你可以给我一个示例如何修改/ etc/hosts中的主机名 – Kain

我有同样的问题,并通过同步每个工作节点的日期与主节点日期相同解决。

[email protected]$sudo date --set="$([email protected] date)" 

之后,尝试更新工作节点,它应该工作。

+0

我在所有节点上都有相同的时间,但问题也存在。 – QtRoS

如果以下解决方案均未奏效。尝试在主服务器上禁用防火墙并查看它是否有效。

我有同样的问题,要做到这一点,你通常不得不使用docker机器的通用驱动程序,但我发现这个驱动程序不能像它应该那样工作......实际上,docker机器只能使用virtualbox驱动程序在物理机器上,而不是VM和云驱动程序。

所以,如果你不能这样做,真的不知道如何,但据我搜索,并没有找到一个解决方案使用Swarm与远程主机。

放弃团队之后,虽然Kubernetes可以工作,但Kubernetes的问题在于它必须用于云或安装在VSphere和I上,因此我无法在ESX中使用更多比300 VM ...

也许你使用的是一个http代理。

您可以使用以下命令查看dockerd在做什么。

# strace -Fp `pidof dockerd` 2>&1 |grep -v futex |grep -v epoll_wait |grep -v pselect 
+0

OMG谢谢你!我不知道Docker Swarm节点使用http进行通信(默认端口2377)! 我配置了一个http代理,如下面的链接所述,所以“docker swarm join”也使用了这个代理,尽管我的工作人员和我的经理在同一个局域网中。 https://*.com/questions/23111631/cannot-download-docker-images-behind-a-proxy#answer-28093517 –

正如wenjianhn解释,请确保您没有为搬运工配置HTTP代理你的工作节点上(如描述here)。事实上,Swarm节点通过http进行通信(默认端口2377),因此如果您配置了http代理,它将使用它,即使管理器节点位于您的LAN中。

此外,还要确保没有防火墙阻止端口2377交通:

[email protected]$ telnet ip-of-manager 2377 

如果您不能打开端口2377 telnet连接,这意味着该端口被防火墙阻止(要么是工作节点的防火墙,要么是经理的防火墙)。