在docker swarm mode中create service到指定label的node下。
以下操作前提是已经创建好了swarm mode的两个node: swarm-1(manager)、swarm-2(worker)。
通过node update为swarm-2添加label elk=yes
1
2
3
| docker node update \
--label-add elk=yes \
swarm-2
|
通过在docker service create中指定–constraint 限制service只能运行到node.labels.elk==yes的节点(就是前面指定的swarm-2节点)
1
2
3
4
5
6
| docker service create \
-p 3000:3000 \
--name hello-service \
--mode=global \
--constraint 'node.labels.elk==yes' \
marshalw/hello-service:0.2.2
|
使用docker service ps查看service情况
1
| docker service ps hello-service
|

根据上面的图可以看到hello-service只运行到了swarm-2上。
测试当节点mount不存在volumn时候是否能正常创建service
1
2
3
4
5
6
7
8
9
| docker service rm hello-service
docker service create \
-p 3000:3000 \
--name hello-service \
--mode=global \
--constraint 'node.labels.elk==yes' \
--mount 'type=bind,source=$PWD,target=/var/lib/hello' \
marshalw/hello-service:0.2.2
|
查看测试结果
1
| docker service ps hello-service
|

说明可以正常创建,但是不能启动,对于非指定label的节点没有影响