如何批量清理旧的(已停止的)Docker 容器?

docker container prune 一键清理所有停止的容器;docker system prune 连未用镜像网络一起清;按条件清理用 docker rm $(docker ps -aq --filter ...)。本文给出安全清理策略。

最佳实践
如何批量清理旧的(已停止的)Docker 容器?封面

一键做法:docker container prune——清掉所有处于停止状态的容器(会提示确认)。更彻底用 docker system prune:停止的容器、悬空镜像、未用网络一起清。想精细控制用 docker ps -aq --filter 筛选后批量 rm。

常用清理命令

# 清所有停止的容器
docker container prune          # 会问 y/N,加 -f 跳过确认

# 全家桶:容器+悬空镜像+未用网络
docker system prune

# 再狠一点:连未被引用的镜像和卷也清
docker system prune -a --volumes   # ⚠️ 卷数据会删,慎用

按条件精准清理

# 退出超过 24 小时的容器
docker ps -aq --filter "status=exited" --filter "until=24h"

# 清掉它们
docker rm $(docker ps -aq --filter "status=exited" --filter "until=24h")

# 按名字模式清(如 CI 残留)
docker rm $(docker ps -aq --filter "name=ci-job-")

清理前检查

  1. 停止 ≠ 无用:有些是故意停下来留档的,确认再删
  2. 可写层数据docker diff 容器名 看有无未持久化的改动,重要先 docker cp 拷出
  3. 卷默认保留:rm 不带 -v 时命名卷不动;匿名卷想连带删用 docker rm -v

自动化:定期清理

# 每周日凌晨清一次停止的容器与悬空镜像
0 3 * * 0 /usr/bin/docker system prune -f

CI 构建机、开发机尤其需要——容器残留是磁盘缓慢失血的主因。

观测云对照

残留堆积在趋势里可见。 主机上容器数量、磁盘用量由 DataKit 持续采集,容器只增不减的趋势线、磁盘水位上涨都能触发监控器告警,清理从救火变例行。

常见问题(FAQ)

Q:prune 会影响正在运行的容器吗?
A:不会,只动停止状态的。

Q:清完磁盘空间没怎么变?
A:大头可能在镜像或容器日志:docker system df 看去向,镜像用 docker image prune -a,日志见本系列磁盘清理篇。

Q:删错了能恢复吗?
A:容器删了就没了(可写层随之消失);卷没被 -v 连删的话数据还在,重建容器挂回即可。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台