使用docker-machine设置Swarm时遇到的问题

3
我有一个问题,需要部署基于本地virtualbox的Swarm - 我已经按照官方Docker文档中使用docker-machine工具设置主/从节点的指示进行操作。我在Docker Hub上创建了token,并使用了--swarm(和--swarm-master),并配合--swarm-discovery token://XXXX... 到目前为止都很好,两台机器正在运行,并似乎已注册为Swarm的主节点和工作节点:
spaceback@brutus:~$ docker-machine ls
NAME           ACTIVE      DRIVER       STATE     URL                         SWARM                   DOCKER    ERRORS
swarm-master   * (swarm)   virtualbox   Running   tcp://192.168.99.100:2376   swarm-master (master)   v1.12.0   
swarm-node1    -           virtualbox   Running   tcp://192.168.99.101:2376   swarm-master            v1.12.0   
spaceback@brutus:~$ docker run --rm swarm list token://[....]
192.168.99.101:2376
192.168.99.100:2376

在使用 "eval $(docker-machine env --swarm swarm-master)" 设置正确的环境值后,我可以使用 "docker info" 获取状态,指示我有两个运行节点...

但是任何尝试运行其他的docker swarm命令(docker node...,docker service...)都会收到 "Error response from daemon: 404 page not found" 的错误提示。

我做错了什么?

1个回答

8

看起来您正试图使用新的swarm mode功能与旧的docker swarm配合使用。

以下脚本创建一个由3个管理节点和2个工作节点组成的HA Swarm集群(使用Docker 1.12.0):

#=========================
# Creating cluster members
#=========================
docker-machine create --driver virtualbox node1
docker-machine create --driver virtualbox node2
docker-machine create --driver virtualbox node3
docker-machine create --driver virtualbox node4
docker-machine create --driver virtualbox node5

#===============
# Starting swarm
#===============
MANAGER_IP=$(docker-machine ip node1)

docker-machine ssh node1 docker swarm init --advertise-addr $MANAGER_IP

#===============
# Adding members
#===============
MANAGER_TOKEN=$(docker-machine ssh node1 docker swarm join-token --quiet manager)
WORKER_TOKEN=$(docker-machine ssh node1 docker swarm join-token --quiet worker)

docker-machine ssh node2 docker swarm join --token $MANAGER_TOKEN $MANAGER_IP:2377
docker-machine ssh node3 docker swarm join --token $MANAGER_TOKEN $MANAGER_IP:2377
docker-machine ssh node4 docker swarm join --token $WORKER_TOKEN  $MANAGER_IP:2377
docker-machine ssh node5 docker swarm join --token $WORKER_TOKEN  $MANAGER_IP:2377

列出集群成员。
$ docker-machine ssh node1 docker node ls
ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
4s0mrh2u4sa2p260ung8ipb0m *  node1     Ready   Active        Leader
5ra7b8cwarpcpa47p2gq2ecxs    node2     Ready   Active        Reachable
66t3pq66ynlvyl3do6lpn9kzb    node3     Ready   Active        
7k5n1id2q6yncqjbv7l8ec0r5    node5     Ready   Active        
833e4ya58hq62epplreyvwtnm    node4     Ready   Active 

创建一个服务
$ docker-machine ssh node1 docker service create --name web --replicas=10 -p 30000:80 nginx

$ docker-machine ssh node1 docker service ps web
ID                         NAME    IMAGE  NODE   DESIRED STATE  CURRENT STATE           ERROR
2fxy4n57p8ot3mn0kws96pnuk  web.1   nginx  node1  Running        Running 30 seconds ago  
cmm1s3h8ds7tmppf7pwvl5zxw  web.2   nginx  node5  Running        Running 6 seconds ago   
7ixgtqlz049ggi90363js088b  web.3   nginx  node1  Running        Running 30 seconds ago  
4o1e2wkh0x4rp8h9o73as8drf  web.4   nginx  node3  Running        Running 22 seconds ago  
6lufnzzddljlw0lnu0qyftzh6  web.5   nginx  node3  Running        Running 22 seconds ago  
49g43g23t4r9lpmitfs4uu1j6  web.6   nginx  node2  Running        Running 3 seconds ago   
43dopngi08licw4xttipnfdb6  web.7   nginx  node2  Running        Running 3 seconds ago   
8d47dvmokf65xb271fyk3jlbu  web.8   nginx  node4  Running        Running 7 seconds ago   
2t56edm3k4x98yjkvgamyq6v4  web.9   nginx  node5  Running        Running 6 seconds ago   
byij5j5pom1t3elu2ydteasg7  web.10  nginx  node4  Running        Running 7 seconds ago   

啊哈...嗯,我可以编写这种脚本(或手动执行swarm init/join步骤),但我认为docker-machine的--swarm*选项组应该自动地为我设置swarm,至少docker-machine文档看起来是这样的...所以这些选项实际上不能用于使用新的docker引擎1.12? - Jiří Novák
Docker Swarm已经在1.12版本中集成到Docker引擎中。这旨在取代以容器形式运行的旧Swarm。docker-machine中的Swarm选项旨在使旧Swarm更易于使用。您仍然可以使用它们,但是您不能期望新的docker引擎命令(如“docker node”或“docker service”)能够正常工作。 - Mark O'Connor
@mark-oconnor 对,我被 swarm 的两个版本搞混了,在睡了几个小时后进行了更多的搜索和阅读,我找到了答案 :) 感谢您的澄清... - Jiří Novák
1
经过长时间的搜索,我终于让它工作了。谢谢!干得好! - user3564183

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接