You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过deploy.placement.constraints在Docker Swarm指定多节点部署服务?

用Docker Swarm的deploy.placement.constraints实现多节点指定部署(无需手动标签)
  • 问题根源:直接配置多个node.id == <节点ID>的约束是**逻辑与(AND)**关系,没有节点能同时拥有两个不同的ID,所以服务无法找到符合条件的节点。
  • 正确写法:使用node.id in操作符,一次性指定多个节点ID,这属于**逻辑或(OR)**关系,节点只要匹配其中一个ID就会被选中。

具体操作步骤:

  1. 获取节点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
    
  2. 编写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]
    
  3. 部署服务
    执行栈部署命令:

    docker stack deploy -c compose.yml your-stack-name
    
  4. 验证部署结果
    分别查看两个服务的运行节点:

    docker service ps service1
    docker service ps service2
    

    确认service1仅运行在node1、node2,service2仅运行在node2、node3。

内容的提问来源于stack exchange,提问作者jislam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:31:02