我对docker swarm有点问题。我在DigitalOcean上创建了2个实例,我将分别使用公共IP地址100.0.0.1和100.0.0.2来引用它们。我以root身份进入第一个droplet并尝试运行命令docker swarm init
并返回错误,eth0
绑定到2个IP地址,公共IP地址和私有IP地址。
然后我尝试运行docker swarm init --advertise-addr 10.0.0.1
以防止这种情况并且群体工作。但每当我尝试使用join命令从第二个droplet或我的本地机器的任何地方连接到它时,它会打印出来,返回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.
但它永远不会连接到swarm。
我尝试在没有advert-addr的情况下在ec2上运行相同的程序,并且它完美地运行,只有当我使用DigitalOcean时才出现问题。有什么帮助吗?
感谢。
答案 0 :(得分:1)
在撰写本文时,似乎DigitalOcean的Docker的一键式应用程序已损坏,并且由于某种原因无法连接群集节点。我找到的唯一解决方法是运行普通的ubuntu(或任何其他操作系统)映像并手动安装Docker。这似乎解决了这个问题。
答案 1 :(得分:0)
它也对我有用。我尝试使用docker 17.12.0随附的一键式应用程序,但此方法不起作用。然后,我尝试使用docker 18.06.1重新安装Ubuntu,它运行良好。
答案 2 :(得分:0)
对于DigitalOcean docker-18-04
图片:
ufw allow 22/tcp
ufw allow 2376/tcp
ufw allow 2377/tcp
ufw allow 7946/tcp
ufw allow 7946/udp
ufw allow 4789/udp
ufw reload
ufw enable
这些端口都需要在管理者节点和工作节点上同时打开!
2.重新启动Docker:systemctl restart docker
3.在Droplet中检查您的专用网络的名称:
ifconfig -a
4.使用docker swarm init --advertise-addr eth1:2377
初始化集群,其中eth1
是Droplet专用网络的名称。
比您将能够从工作节点加入此网络。