2016-04-11 55 views
0

我正在沙箱中建立我的码头群集群。 我在一台机器上有1个动物园管理员用于发现,1个群主和2个群节点。 我尝试连接它们,但是当我尝试在swarm master上运行我的docker run命令时,它不会将工作分发到节点。 另外,当我在swarm master上做docker info时,我可以看到节点没有连接。 我不知道我在做什么错。 这里是重现我的问题步骤:无法将节点连接到码头群主机(使用zookeeper)

我有一个空pwd/data文件夹和pwd/config文件夹和我zoo.cfg:

tickTime=2000 
dataDir=/tmp/zookeeper 
clientPort=2181 
initLimit=5 

-

#---- CREATE ZOO --- 

docker-machine create --driver virtualbox zoo1 
docker-machine start zoo1 
eval $(docker-machine env zoo1) 

docker pull jplock/zookeeper 

docker run -p 2181:2181 -v `pwd`/conf:/opt/zookeeper/conf -v `pwd`/data:/tmp/zookeeper jplock/zookeeper 

docker-machine ip zoo1 #############192.168.99.100 

-

#--- CREATE CLUSTER --- 

docker-machine create --driver virtualbox --swarm --swarm-master machine-smaster 
docker-machine create --driver virtualbox --swarm machine-s01 
docker-machine create --driver virtualbox --swarm machine-s02 

-

eval "$(docker-machine env machine-smaster)" 
docker run -p 2375:2375 -d -t swarm manage -H 0.0.0.0:2375 --advertise $(docker-machine ip machine-smaster):2375 zk://192.168.99.100:2181/swarm 
docker run swarm list zk://192.168.99.100:2181/swarm 

sleep 10 

eval "$(docker-machine env machine-s01)" 
docker run -d swarm join --advertise $(docker-machine ip machine-s01):2375 zk://192.168.99.100:2181/swarm 
docker run swarm list zk://192.168.99.100:2181/swarm 

eval "$(docker-machine env machine-s02)" 
docker run -d swarm join --advertise $(docker-machine ip machine-s02):2375 zk://192.168.99.100:2181/swarm 
docker run swarm list zk://192.168.99.100:2181/swarm 

如果我运行一些容器:

eval "$(docker-machine env machine-smaster)" 
docker run hello-world 

工作不分派到节点(它由主运行)。 如果我运行码头信息:

eval "$(docker-machine env machine-smaster)" 
docker info 

我没有看到swarm节点。

+0

我认为你正在连接* docker * API,而不是主站的* sw​​arm * API;试试'eval“$(docker-machine env --swarm machine-smaster)”' – thaJeztah

回答

0

您可以验证您所宣传的地址是从管理器实例实际上是可达到?即docker -H $(docker-machine ip machine-s01):2375 info是否返回有效结果?

(请注意,此子shell不会经理VM内部工作,只是原来的客户端上。)

也许你的问题是启动泊坞窗机实例在:2376听与 TLS,但你的开始Swarm容器试图通告并连接到:2375没有指定了任何TLS设置?

Swarm容器的docker logs是什么意思?

+0

'docker -H $(docker-machine ip machine-s01):来自machine-smaster的2375 info'给了我:无法连接到Docker守护进程。码头守护程序是否在该主机上运行? 'docker logs':time =“2016-04-12T20:57:50Z”level = fatal msg =“发现管理集群所需的信息,请参阅'swarm manage --help'。”我删除了swarm管理上的所有tls选项并尝试了'docker logs' INFO初始化没有TLS的发现信息HTTP侦听HTTP addr = 0.0.0.0:2375 proto = tcp,但第一个命令仍然无效 – rolele

+0

我已经建立了一个githup repo来轻松地重现我的问题:https://github.com/casertap/playing-with-docker-swarm – rolele

+0

@pierolele,这正是我的观点。您无法连接到您在Swarm容器上发布广告的Docker主机/端口,因此当然会失败。您需要宣传:2376,并确保使用'-v'正确地将证书绑定到管理器容器中。 – nathanleclaire

0

它看起来像你通过多克尔 API,而不是 API连接到“群主”的机器。因此,Docker将始终在连接的主机上部署容器,并且不会利用Swarm在正确的主机上调度容器。

要连接到 API,运行时docker-machine env添加--swarm选项,所以你的情况:

eval "$(docker-machine env --swarm machine-smaster)" 
+0

下面是我用--swarm运行时得到的结果: '$ eval“$(docker-machine env --swarm machine-smaster) “' 错误检查TLS连接:连接到Swarm无法检查,但证书是有效的。也许swarm没有启动 '$ eval“$(docker-machine env machine-smaster)”' '$ docker ps' f5bb895cdad9 swarm“/ swarm manage -H 0.0”51秒前上升48秒0.0.0.0: 2375-> 2375/tcp tiny_kowalevski – rolele

+0

我认为swarm master启动时没有TLS,docker-machine试图与TLS通信。另请参阅https://docs.docker.com/swarm/install-w-machine/ – thaJeztah

+0

因此,不是'docker run -p 2375:2375 -d -t swarm manage -H 0.0.0.0:2375 --advertise $(我添加了所有与TLS相关的选项: 'docker run -p 2375:2375 -d -t -v/var/lib/docker-machine ip-smaster):2375 zk://192.168.99.100:2181/boot2docker:/ certs:ro swarm manage --tlsverify --tlscacert =/certs/ca.pem --tlscert =/certs/server.pem --tlskey =/certs/server-key.pem -H 0.0.0.0:2375 --advertise $(docker-machine ip machine-smaster):2375 zk://192.168.99.101:2181/swarm'我得到和以前一样的TLS错误 – rolele