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

如何通过Docker Stack部署节点专属镜像服务,避免重复部署

问题分析

你当前的循环部署方式存在核心问题:每次执行docker stack deploy都会更新栈内同一个service1服务的配置,前两次部署的配置会被最后一次覆盖,最终只会在node3上部署对应镜像的实例,无法实现三个节点各部署对应镜像实例的目标。

解决方案

方案1:在Compose文件中定义独立服务

直接在compose.yml中为每个节点创建专属服务,每个服务绑定对应镜像和节点约束,一次部署即可完成所有节点的配置:

version: '3'

services:
  service1-node1:
    image: username/image:node1
    deploy:
      replicas: 1
      placement:
        max_replicas_per_node: 1
        constraints:
          - node.labels.with_imgTag==node1
      restart_policy:
        condition: on-failure

  service1-node2:
    image: username/image:node2
    deploy:
      replicas: 1
      placement:
        max_replicas_per_node: 1
        constraints:
          - node.labels.with_imgTag==node2
      restart_policy:
        condition: on-failure

  service1-node3:
    image: username/image:node3
    deploy:
      replicas: 1
      placement:
        max_replicas_per_node: 1
        constraints:
          - node.labels.with_imgTag==node3
      restart_policy:
        condition: on-failure

执行部署命令:

docker stack deploy -c compose.yml stack-4-service-1

每个服务会独立部署到对应节点,且max_replicas_per_node:1确保每个节点仅运行一个对应实例,不会互相干扰。

方案2:单独创建每个节点的服务

如果不想修改Compose文件,也可以直接用docker service create命令分别为每个节点创建服务:

# 部署node1对应实例
docker service create \
  --name service1-node1 \
  --replicas 1 \
  --constraint 'node.labels.with_imgTag==node1' \
  --max-replicas-per-node 1 \
  --restart-condition on-failure \
  username/image:node1

# 部署node2对应实例
docker service create \
  --name service1-node2 \
  --replicas 1 \
  --constraint 'node.labels.with_imgTag==node2' \
  --max-replicas-per-node 1 \
  --restart-condition on-failure \
  username/image:node2

# 部署node3对应实例
docker service create \
  --name service1-node3 \
  --replicas 1 \
  --constraint 'node.labels.with_imgTag==node3' \
  --max-replicas-per-node 1 \
  --restart-condition on-failure \
  username/image:node3

关键说明

  • 不要重复部署同一个服务:docker stack deploy对同一个栈内的同名服务会执行配置更新,而非新增实例,这是你当前方案失效的核心原因。
  • 每个节点绑定专属服务:通过独立服务或独立创建命令,确保每个节点的镜像和约束绑定唯一,避免配置覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:27:18