【问题标题】:Node cannot join Swarm Cluster节点无法加入 Swarm 集群
【发布时间】:2016-12-14 00:39:07
【问题描述】:

我有 3 个虚拟机。他们都有 docker 1.12 并且在 centos7 上运行。 所有端口都打开了,虚拟机可以互相ping通 我用

启动了我的集群
docker swarm init --advertise-addr 192.168.140.12

Docker 信息显示给我:

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.

Docker 信息显示给我:

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

【问题讨论】:

  • 不需要 ssh 访问权限。这些虚拟机之间是否有可能阻止端口 2377 流量的防火墙?
  • 我执行了systemctl disable firewalld,所以我认为防火墙不是问题。
  • 当我执行 docker info 时,我有时会看到这个变化: Network: null bridge host overlay to bridge host overlay null and back。这是否正常/与我的问题有什么关系?
  • 我已经添加了我的节点的一些日志,我试图将这些日志添加到 swarm 集群中

标签: docker docker-swarm


【解决方案1】:

也许您使用的是 http 代理。

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

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

【讨论】:

  • 天哪,谢谢!!我不知道 Docker Swarm 节点使用 http 相互通信(默认端口 2377)!我已经按照下面的链接配置了一个 http 代理,所以“docker swarm join”也使用了这个代理,尽管我的工作人员和我的经理在同一个局域网中。 stackoverflow.com/questions/23111631/…
【解决方案2】:

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

【讨论】:

  • 你能给我一个示例如何修改 /etc/hosts 中的主机名
【解决方案3】:

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

另外,请确保没有防火墙阻止端口 2377 上的流量:

user@workernode$ telnet ip-of-manager 2377

如果您无法在端口 2377 上打开 telnet 连接,则表示该端口被防火墙(工作节点的防火墙或管理节点的防火墙)阻止。

【讨论】:

    【解决方案4】:

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

    pi@workernode$sudo date --set="$(username@masternode date)"
    

    在此之后,尝试更新工作节点,它应该可以工作。

    【讨论】:

    • 我所有节点的时间都是一样的,但是问题也存在。
    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

      我遇到了类似的问题。我检查了没有配置代理,也没有防火墙,但是“docker swarm join”不起作用。我注意到“码头信息”中列出的经理不再存在。 “docker node ls”没有显示任何奇怪的东西。

      最终我通过在“docker swarm join”处理的节点上执行“service docker restart”解决了我的问题。显然,docker daemon 中的一些内部簿记不同步。

      【讨论】:

        猜你喜欢
        • 2019-01-15
        • 2016-09-22
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        相关资源
        最近更新 更多