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

不使用Swarm/Stack,如何实现Docker Compose容器的顺序更新?

问题原因

deploy.update_config 是Docker Swarm模式下的专属配置项,普通单机版Docker Compose(非Swarm集群)不会解析这个配置,所以你设置的parallelism:1和delay:10s完全不生效,执行docker compose up -d时会一次性替换所有副本容器。

非Swarm环境下的顺序更新方案

不用Swarm/Stack的话,只能通过脚本手动实现滚动更新,以下是两种可行方案:

方案一:逐个强制重建容器(简单直接)

先拉取新镜像,然后循环逐个重建容器,每次间隔10秒:

# 拉取最新镜像
docker compose pull myservice

# 逐个重建容器
for container in $(docker compose ps -q myservice); do
  # 仅重建当前容器,不影响其他服务
  docker compose up -d --no-deps --force-recreate $container
  # 等待10秒再处理下一个
  sleep 10
done
  • --no-deps:避免重启当前服务依赖的其他服务
  • --force-recreate:强制用新镜像重建容器,即使配置没有变化

方案二:无停机滚动更新(适合生产环境)

先启动新镜像的容器,再逐个停止旧容器,保证服务始终可用:

# 拉取最新镜像
docker compose pull myservice

# 先扩容1个新容器(此时共6个,1个新镜像+5个旧镜像)
docker compose up -d --scale myservice=6
sleep 10

# 按创建时间排序,逐个停止并删除旧容器
for old_container in $(docker compose ps -q myservice | sort | head -n 5); do
  docker stop $old_container
  docker rm $old_container
  sleep 10
done

# 缩回到5个副本(此时全部是新镜像的容器)
docker compose up -d --scale myservice=5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:35:36