--update-delay 是 Docker Swarm 滚动更新中控制批次间强制等待时间的参数,单位为秒或带单位时间字符串(如 10s),最小 1s,需配合 --update-parallelism 使用,作用于批次而非单个容器。
--update-delay 是 docker swarm 在执行服务更新(如滚动升级)时,用于控制各批次任务(tasks)之间等待时间的参数。它不是“间隔预算”这种模糊概念,而是明确指定两个连续批次之间必须等待的最短时间,单位是秒或带单位的时间字符串(如 10s、2m30s)。
这个参数只在使用 docker service update 或创建服务时配合滚动更新策略(--update-parallelism)一起生效。
作用对象:批次(batch)而非单个容器
Swarm 不是一个容器一个容器地升级,而是按“批次”推进。例如:
- 你有 10 个副本(replicas),设了 --update-parallelism 2 → 每批停 2 个旧任务、启 2 个新任务;
- 再设 --update-delay 30s → 每批完成后,必须等满 30 秒,才开始下一批。
注意:这个延迟是强制等待期,即使前一批任务已就绪,也必须等到 delay 时间结束才会触发下一批。它不保证“刚好 30 秒”,但确保至少 30 秒。
怎么设置:命令行或 compose 文件
命令行示例(更新已有服务):
docker service update \ --update-parallelism 3 \ --update-delay 20s \ my-web-app
Compose 文件中写法(v3.4+):
services:
web:
image: nginx:1.25
deploy:
update_config:
parallelism: 3
delay: 20s
⚠️ 注意:delay 必须带单位(s/m/h),不能只写数字;且不能小于 1s(最小支持 1s)。
和 --update-failure-action 配合使用更稳妥
仅靠 delay 无法应对失败场景。建议搭配失败处理策略:
- --update-failure-action pause:某批失败后暂停整个更新,人工介入;
- --update-failure-action continue:跳过失败批次,继续后续批次(慎用);
- --update-monitor 60s:每批启动后,最多等待 60 秒确认是否就绪(健康检查通过);
- --update-max-failure-ratio 0.1:允许最多 10% 的任务失败才中断更新。
这些参数共同构成可控的滚动更新行为,delay 只是其中控制节奏的一环。
常见误区提醒
✘ 误以为 delay 控制单个容器启动间隔:它管的是批次间等待,不是容器启动速度;
✘ 设太小(如 1s)可能压垮依赖服务:尤其当新版本启动需调用数据库/API 时,密集批次易引发雪崩;
✘ 忽略 monitor 和 failure-action,只设 delay:delay 再合理,遇到崩溃任务也会卡住或跳过问题;
✘ 在 global 模式服务上用 --update-parallelism:global 服务不支持分批,parallelism 和 delay 会被忽略。
不复杂但容易忽略细节


















