无法将节点连接到 docker swarm master(使用 zookeeper)
Can not connect nodes to docker swarm master (using zookeeper)
我正在沙盒中构建我的 docker swarm 集群。
我在一台机器上有 1 个 zookeeper 用于发现,1 个 swarm master 和 2 swarm nodes。
我尝试连接它们,但是当我尝试 运行 我的 docker 运行 命令时,它不会将工作分配给节点。
此外,当我在 swarm master 上执行 docker info
时,我可以看到节点未连接。
我不知道我做错了什么。
以下是重现我的问题的步骤:
我有一个空的 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
工作没有分派到节点(由master 运行)。
如果我 运行 docker 信息:
eval "$(docker-machine env machine-smaster)"
docker info
我没有看到 swarm 节点。
您似乎是通过 Docker API 而不是 连接到 "Swarm master" 机器群API。因此,Docker 将始终在您连接的主机上部署容器,而不会利用 Swarm 将容器调度到正确的主机上。
要连接到 Swarm API,请在 运行 docker-machine env
时添加 --swarm
选项,因此在您的情况下:
eval "$(docker-machine env --swarm machine-smaster)"
您能否验证您公布的地址实际上可以从管理器实例访问?即,docker -H $(docker-machine ip machine-s01):2375 info
return 是有效结果吗?
(请注意,此子外壳无法在管理器 VM 中运行,只能在您的原始客户端上运行。)
也许您的问题是启动的 Docker 机器实例正在侦听 :2376
with TLS,但是您启动的 Swarm 容器正在尝试通告和连接到 :2375
没有指定 任何 TLS 设置?
Swarm 容器的 docker logs
是怎么说的?
我正在沙盒中构建我的 docker swarm 集群。
我在一台机器上有 1 个 zookeeper 用于发现,1 个 swarm master 和 2 swarm nodes。
我尝试连接它们,但是当我尝试 运行 我的 docker 运行 命令时,它不会将工作分配给节点。
此外,当我在 swarm master 上执行 docker info
时,我可以看到节点未连接。
我不知道我做错了什么。
以下是重现我的问题的步骤:
我有一个空的 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
工作没有分派到节点(由master 运行)。 如果我 运行 docker 信息:
eval "$(docker-machine env machine-smaster)"
docker info
我没有看到 swarm 节点。
您似乎是通过 Docker API 而不是 连接到 "Swarm master" 机器群API。因此,Docker 将始终在您连接的主机上部署容器,而不会利用 Swarm 将容器调度到正确的主机上。
要连接到 Swarm API,请在 运行 docker-machine env
时添加 --swarm
选项,因此在您的情况下:
eval "$(docker-machine env --swarm machine-smaster)"
您能否验证您公布的地址实际上可以从管理器实例访问?即,docker -H $(docker-machine ip machine-s01):2375 info
return 是有效结果吗?
(请注意,此子外壳无法在管理器 VM 中运行,只能在您的原始客户端上运行。)
也许您的问题是启动的 Docker 机器实例正在侦听 :2376
with TLS,但是您启动的 Swarm 容器正在尝试通告和连接到 :2375
没有指定 任何 TLS 设置?
Swarm 容器的 docker logs
是怎么说的?