如何通过deploy.placement.constraints在Docker Swarm指定多节点部署服务?
用Docker Swarm的deploy.placement.constraints实现多节点指定部署(无需手动标签)
- 问题根源:直接配置多个
node.id == <节点ID>的约束是**逻辑与(AND)**关系,没有节点能同时拥有两个不同的ID,所以服务无法找到符合条件的节点。 - 正确写法:使用
node.id in操作符,一次性指定多个节点ID,这属于**逻辑或(OR)**关系,节点只要匹配其中一个ID就会被选中。
具体操作步骤:
获取节点ID
执行以下命令查看集群节点的唯一ID:docker node ls输出类似如下,记录
ID列对应node1、node2、node3的标识(可写完整ID或前几位,只要能唯一识别节点即可):ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION abc123xyz node1 Ready Active 24.0.6 def456uvw node2 Ready Active 24.0.6 ghi789rst node3 Ready Active 24.0.6编写compose.yml配置文件
用node.id in语法指定目标节点集合:version: '3.8' services: service1: image: your-image-1:latest deploy: placement: constraints: - node.id in [abc123xyz, def456uvw] service2: image: your-image-2:latest deploy: placement: constraints: - node.id in [def456uvw, ghi789rst]部署服务
执行栈部署命令:docker stack deploy -c compose.yml your-stack-name验证部署结果
分别查看两个服务的运行节点:docker service ps service1 docker service ps service2确认service1仅运行在node1、node2,service2仅运行在node2、node3。
内容的提问来源于stack exchange,提问作者jislam
相关产品推荐
相关产品推荐

