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

如何在Docker Swarm每个节点上运行2个容器实例

如何在Docker Swarm集群每个节点运行2个容器实例

Docker Swarm本身没有直接提供“每个节点固定N个副本”的内置配置,但可以通过以下两种方式实现需求:

方法一:创建两个Global模式服务

Global模式的服务会在每个集群节点上启动一个容器,因此只需创建两个配置相同(仅服务名不同)的Global服务,就能让每个节点运行2个目标容器实例。

命令行方式

分别创建两个Global服务:

docker service create --name my-service-1 --mode global your-image:tag
docker service create --name my-service-2 --mode global your-image:tag

Docker Compose方式

通过Compose文件定义两个Global服务,统一部署:

version: '3.8'
services:
  service-1:
    image: your-image:tag
    deploy:
      mode: global
  service-2:
    image: your-image:tag
    deploy:
      mode: global

执行部署命令:

docker stack deploy -c docker-compose.yml my-stack

这种方式的优势是自动适配节点数量变化,新增节点会自动启动两个容器;缺点是需要管理两个独立服务,监控时需同时关注两者状态。

方法二:结合节点标签与副本数配置

通过给节点打标签、限制单节点最大副本数,再按节点总数计算总副本数,实现每个节点运行2个容器。

步骤1:给目标节点打标签

为所有需要运行容器的节点添加统一标签:

docker node update --label-add service-target=true <节点ID>

步骤2:创建带约束的服务

假设集群中带service-target=true标签的节点总数为N,则总副本数设为2*N,同时配置单节点最大副本数为2:

# 先获取节点数量N
N=$(docker node ls --filter label=service-target=true -q | wc -l)
# 创建服务
docker service create --name my-service --replicas $((2*N)) \
  --constraint node.labels.service-target==true \
  --placement max_replicas_per_node=2 \
  --placement-pref spread=node.id \
  your-image:tag

这种方式的优势是仅需管理一个服务,运维更统一;缺点是节点数量变化时,需要手动重新计算并更新副本数,无法自动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:15:59