无法将节点连接到docker swarm master(使用zookeeper)

时间:2016-04-11 22:51:25

标签: docker apache-zookeeper docker-swarm

我正在沙箱中构建我的docker swarm群集。 我在机器上有1个动物园管理员用于发现,1个群主和2个群节点。 我尝试连接它们但是当我尝试在swarm master上运行docker run命令时,它不会将工作分配给节点。 此外,当我在群集主服务器上docker info时,我可以看到节点未连接。 我不知道我做错了什么。 以下是重现我的问题的步骤:

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

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

不会将工作分派给节点(由主节点运行)。 如果我运行docker info:

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

我没有看到群集节点。

2 个答案:

答案 0 :(得分:0)

看起来你正在连接到" Swarm master"机器通过 Docker API,而不是 Swarm API。因此,Docker将始终在您连接的主机上部署容器,并且不利用Swarm调度正确主机上的容器。

要连接 Swarm API,请在运行--swarm时添加docker-machine env选项,因此在您的情况下:

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

答案 1 :(得分:0)

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

(请注意,此子shell不会在管理器VM内部工作,只能在原始客户端上运行。)

也许您的问题是已启动的Docker Machine实例正在使用 TLS监听:2376 ,但您启动的Swarm容器正在尝试通告并连接到:2375 没有指定的任何TLS设置?

Swarm容器的docker logs说什么?