我只是按照本教程一步一步地在EC2中设置一个泊坞群 - https://docs.docker.com/swarm/install-manual/
我使用Amazon Linux AMI创建了4个Amazon服务器。
我按照说明启动了swarm,所有关于制作docker实例的一切似乎都没问题。
正在运行docker ps
:
Consul日志显示此
2016/07/05 20:18:47 [INFO] serf: EventMemberJoin: 729a440e5d0d 172.17.0.2
2016/07/05 20:18:47 [INFO] serf: EventMemberJoin: 729a440e5d0d.dc1 172.17.0.2
2016/07/05 20:18:48 [INFO] raft: Node at 172.17.0.2:8300 [Follower] entering Follower state
2016/07/05 20:18:48 [INFO] consul: adding server 729a440e5d0d (Addr: 172.17.0.2:8300) (DC: dc1)
2016/07/05 20:18:48 [INFO] consul: adding server 729a440e5d0d.dc1 (Addr: 172.17.0.2:8300) (DC: dc1)
2016/07/05 20:18:48 [ERR] agent: failed to sync remote state: No cluster leader
2016/07/05 20:18:49 [WARN] raft: Heartbeat timeout reached, starting election
2016/07/05 20:18:49 [INFO] raft: Node at 172.17.0.2:8300 [Candidate] entering Candidate state
2016/07/05 20:18:49 [INFO] raft: Election won. Tally: 1
2016/07/05 20:18:49 [INFO] raft: Node at 172.17.0.2:8300 [Leader] entering Leader state
2016/07/05 20:18:49 [INFO] consul: cluster leadership acquired
2016/07/05 20:18:49 [INFO] consul: New leader elected: 729a440e5d0d
2016/07/05 20:18:49 [INFO] raft: Disabling EnableSingleNode (bootstrap)
2016/07/05 20:18:49 [INFO] consul: member '729a440e5d0d' joined, marking health alive
2016/07/05 20:18:50 [INFO] agent: Synced service 'consul'
我使用以下命令使用适当的IP
注册了每个节点docker run -d swarm join --advertise=x-x-x-x:2375 consul://x-x-x-x:8500
每个人都创建了一个泊坞窗实例
正在运行docker ps
:
使用日志表明存在问题:
time="2016-07-05T21:33:50Z" level=info msg="Registering on the discovery service every 1m0s..." addr="172.31.17.35:2375" discovery="consul://172.31.3.233:8500"
time="2016-07-05T21:36:20Z" level=error msg="cannot set or renew session for ttl, unable to operate on sessions"
time="2016-07-05T21:37:20Z" level=info msg="Registering on the discovery service every 1m0s..." addr="172.31.17.35:2375" discovery="consul://172.31.3.233:8500"
time="2016-07-05T21:39:50Z" level=error msg="cannot set or renew session for ttl, unable to operate on sessions"
time="2016-07-05T21:40:50Z" level=info msg="Registering on the discovery service every 1m0s..." addr="172.31.17.35:2375" discovery="consul://172.31.3.233:8500"
...
最后当我到最后一步尝试在我的Consul机器上获取主机信息时,
docker -H :4000 info
我看不到任何节点。最后,当我尝试运行应用程序的步骤时,我得到了明显的错误:
[ec2-user@ip-172-31-3-233 ~]$ docker -H :4000 run hello-world
docker: Error response from daemon: No healthy node available in the cluster.
See 'docker run --help'.
[ec2-user@ip-172-31-3-233 ~]$
感谢您对此有任何见解。我仍然对很多群模型感到困惑,不知道从哪里去诊断。
答案 0 :(得分:0)
看起来Consul要么没有绑定到公共IP地址,要么由于安全组或VPC设置而无法在公共IP上访问。您正在Docker节点上将发现URL设置为consul://172.31.3.233:8500
,因此我会尝试从外部IP连接到该地址,无论是在浏览器中还是通过curl
,如下所示:
% curl http://172.31.3.233:8500/ui/dist/
HTML
如果您无法连接(连接被拒绝或超时),请将TCP端口8500入口规则添加到您的AWS VM,然后重试。
答案 1 :(得分:0)
在调查了您的问题之后,我发现您忘记了在所有四个节点中为Docker Engine打开端口2375.
在启动Swarm Manager或Swarm Node之前,您必须为Docker Engine打开TCP端口,因此Swarm将通过该端口与Docker Engine一起使用。
使用Ubuntu 14.04上的Docker,您可以通过更改文件/etc/default/docker
打开端口,并将-H tcp://0.0.0.0:2375
添加到DOCKER_OPTS。例如:
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
之后,重启Docker Engine
service docker restart
如果您使用的是CentOS,解决方案是相同的,您可以阅读我的博客文章https://sonnguyen.ws/install-docker-docker-swarm-centos7/
另一方面,我认为您应该在所有节点(4台服务器)中安装和运行Consul。因此,您的Swarm可以在其节点上与Consul一起使用