Docker Swarm 清理历史任务记录
问题描述
Swarm 模式下,服务更新或容器重启后,docker service ps <service> 中会积累大量 Shutdown 状态的历史任务记录。这些记录会占用磁盘空间,大量堆积甚至可能导致集群异常。
核心结论
不需要删除服务,只需调整全局集群配置或手动清理。
⚠️ 常见误区
| 错误命令 | 原因 | 正确命令 |
|---|---|---|
docker service update --task-history-limit 1 |
service 命令没有这个参数 |
docker swarm update --task-history-limit 1 |
docker service rm <service> |
会导致服务停机,数据/配置丢失 | 不要用 |
docker rm $(docker ps -aq) |
会删除运行中的容器,导致服务崩溃 | 用 docker container prune |
方案一:设置全局清理策略(推荐,一劳永逸)
在 Manager 节点 执行:
1 | # 设置全局历史任务保留数为 1(默认是 5,设为 1 只保留最新记录) |
执行后,docker service ps <service> 中旧的 Shutdown 记录会随新更新自动清理。
验证当前设置:
1 | docker info | grep "Task History" |
方案二:手动强制清理(一次性解决)
1 | # 1. 清理所有节点上的已停止容器(释放磁盘空间) |
注意事项
task-history-limit对配置了restart-max-attempts的服务可能不生效(GitHub Issue #35637)- 大量历史任务堆积可能导致 Manager 节点内存耗尽、集群不可用
- 建议将
task-history-limit设为 1~2,根据排查需求调整