0

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

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

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

我没有看到群节点。

4

2 回答 2

0

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

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

eval "$(docker-machine env --swarm machine-smaster)"
于 2016-04-11T23:23:11.350 回答
0

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

(请注意,这个子shell 不能在管理器 VM 内工作,只能在您的原始客户端上工作。)

也许您的问题是已启动的 Docker Machine 实例正在:2376 使用TLS 进行侦听,但您已启动的 Swarm 容器正在尝试在:2375 指定任何 TLS 设置的情况下进行广告和连接?

docker logsSwarm 容器的说明是什么?

于 2016-04-12T19:01:40.670 回答