在worker节点机器上通过docker swarm join 到 manger node时,报Timeout错误,如下:
Error response from daemon: Timeout was reached before node was joined. The attempt to join the swarm will continue in the background. Use the "docker info" command to see the current swarm status of your node.
在网上搜索了一下,找到了解决方案。我这边是因为 manager 与 worker 时间不同步造成的。
原文链接: https://my.oschina.net/u/3195712/blog/817314
解决方向:
方向一:本地时钟
查看要组成集群的所有机器的本地时钟是否相同(大概相同即可, 差几秒不影响)
输入指令: date
图中,第三个时间不同步
修改第三个服务器的本地时钟:
设置系统时间的操作:格式:date 月日时分年.秒
方向二:主机名 (hostname)
在所有要组成集群的机器上输入:hostname 查看主机名
如果,主机名都为:localhost.localdomain,或者主机名都相同,则需要把所有的主机名修改的不一样,比如可以使用本机ip作为主机名
快速修改主机名的方法:
输入: hostnamectl set-hostname <主机名>
方向三:防火墙
CentOS7的防火墙为 firewalld
最主要的是关闭manager机器的防火墙,其他worker机器的最好也关闭
关闭指令:systemctl stop firewalld.service
然后重启一下docker daemon: systemctl restart docker
worker机器上测试2377端口是否通:
1)在manager节点机器上先执行:
docker swarm init --advertise-addr managerIP
(默认占用2377端口)
用来激活2377端口
2)在worker节点机器上执行:
telnet managerIP 2377
如果端口是通的,则可以进行docker swarm join 来将节点加入集群