首页/云/云与容器速查/docker volume prune 清理未使用卷
容器与 Docker106 条

docker volume prune 清理未使用卷

批量回收未被任何容器引用的卷。Docker 23.0 起默认只删匿名卷,需 -a/--all 才包括闲置命名卷;执行前用 ls --filter dangling=true 核对清单。

云与容器速查云更新于 2026-10-13

回收未引用的数据卷

docker volume prune 批量删除没有任何容器引用的卷。它的语义随版本变化:Docker 23.0 起默认只删匿名卷,加上 -a/--all 才会包含未被使用的命名卷;更早的版本默认就会把命名卷一起删。执行前的稳妥顺序是先列出待删清单核对,再执行,最后用 docker system df 对比占用,确认释放量符合预期。

基本信息

默认行为23.0 及以后只删未使用的匿名卷;老版本默认连命名卷一起删
-a / --all连未被使用的命名卷一并删除,危险等级明显更高
-f / --force跳过交互确认,只在明确知道清单内容时用于脚本
执行前核对docker volume ls --filter dangling=true 列出将被删除的卷
执行后验证docker system df -v 对比清理前后的卷数量与占用
作用范围只影响本机 Docker 引擎,不涉及其他节点或备份系统

典型使用场景

  • 构建机磁盘告急:历史构建产生大量匿名卷,清理后可直接回收空间
  • CI Runner 定期维护:每次流水线结束清理未引用的临时卷
  • 宿主机迁移或重装前回收闲置卷,减少需要搬运的数据量
  • 排查「磁盘被占用但看不到大文件」,确认是 dangling 卷累积所致
  • 编排下线后清理残留卷:确认项目不再需要数据后按项目维度回收

安全的清理流程

安全的清理流程
docker volume ls --filter dangling=true        # 先看清将被删除的卷有哪些
docker volume ls -q | wc -l                    # 统计总数,便于清理后对比
docker ps -a --filter volume=卷名              # 反查是否仍有容器在引用
docker volume prune                            # 默认只清匿名卷(23.0 及以后)
docker system df -v | head -20                 # 对比清理前后的占用
docker volume ls                               # 复查残留,确认清单符合预期

卷类型与默认行为

类型产生方式prune 默认是否删除数据风险
匿名卷docker run 未指定名称时自动创建23.0 及以后默认删除较低,通常是临时数据,可重建
命名卷docker volume create 或 compose 声明需加 -a 才会删除高,常承载数据库与业务持久化数据
compose 项目卷compose 自动加项目前缀与标签同命名卷中,项目重建可恢复结构,但旧数据不回来
绑定挂载目录-v /宿主路径:/容器路径不受影响数据在宿主文件系统上,prune 不触碰
prune 不进回收站,删除即不可恢复。命名卷里常有数据库数据,使用 -a 之前必须确认不存在「容器已停但数据仍需保留」的卷,典型场景是 compose down 之后还打算重新挂载的卷。
升级 Docker 前确认脚本是否依赖旧语义:老版本 prune 默认会删命名卷,升级后同一脚本行为改变。自动化里不要用 -f 掩盖清单核对步骤,至少把 dangling 列表写入日志再执行。

易错点

  • 版本差异踩坑:按老版本语义写的脚本在 23.0 之后行为不同,或反过来在旧版本上跑出「连命名卷一起删」的结果
  • 把 -a 当常规保健操:停用待恢复的数据卷被一并清掉,且没有备份可回退
  • 只用 prune 不看清单:容器暂时停止但卷仍需保留的场景下,卷被判定为未使用而删除
  • 在 CI 里用 -f 静默清理,日志里没有清单,出问题时无法追溯删掉了哪些卷

数据来源与参考

  • Docker Docs:docker volume prune

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌