Docker 占用太多磁盘空间:清理构建缓存,保留镜像和数据卷
用 MangoDisk 查看 Docker 构建缓存的预计占用,在保留镜像、容器和数据卷的前提下清理未使用缓存,并了解重新构建与磁盘空间回收的区别。

如果占用主要来自构建缓存,可以先清理未使用的缓存,保留镜像、容器、网络和数据卷。 Docker 提供的 builder prune 就是针对构建缓存的清理命令。不过,清掉缓存后,下一次构建可能需要重新下载依赖或生成数据;“现在未使用”不代表“以后用不上”。Docker 构建缓存清理说明
想先看清这部分占用,再决定是否值得清理,可以用 MangoDisk 的深度清理。它会读取本机默认 Docker context 的缓存信息,在界面中显示预计占用;由你选择是否执行,清理交给 Docker 的官方命令完成。
用 MangoDisk 查看 Docker 构建缓存
Docker 的命令行能够查看和清理缓存。MangoDisk 把这两步放进图形界面,让你先查看候选占用和清理影响,再选择是否处理,不必记住不同 prune 命令的参数和范围。

上图为深度清理界面示例,不是本次 Docker 检查的截图;具体条目取决于本机扫描结果。
打开深度清理,完成标准扫描,在容器缓存中查看 Docker 构建缓存。这个条目默认不选中,扫描不会自动删除缓存。
准备清理时:
- 等正在进行的构建任务结束,保持 Docker 服务运行;使用 Docker Desktop 时,不要先退出它。
- 查看 Docker 构建缓存的预计占用,确认可以接受后续重新构建或下载的成本。
- 选择暂不选择,只勾选 Docker 构建缓存,核对清理计划后再确认执行。
这个条目不会删除镜像、容器、网络或数据卷,但不能按单个项目选择缓存。 当前实现调用 docker --context default builder prune --all --force,清理默认 context 下 Docker 判定为未使用的构建缓存。不要把它理解为“只清某个旧项目”。MangoDisk v1.1.7 的 Docker 清理实现
这里的 context 是 Docker 客户端连接服务的配置。MangoDisk 固定使用 default,不会跟随你当前选中的其他 context;如果这个目标无法连接,条目就无法正常预览。其他本机 context、自定义 Buildx builder 和远程服务,需要另行核对,不属于这个条目的覆盖范围。Docker context 说明
Docker 服务需要运行,才能提供缓存信息并执行清理。如果没有扫描结果,先确认 Docker 已安装、服务可连接;不能据此认定 Docker 没有占用空间。
预计占用不等于实际释放空间
MangoDisk 的预览估算,只统计 Docker 标记为未使用、未共享且大小非零的构建缓存记录。共享数据不计入这项估算,也不能把所有镜像和缓存的显示大小直接相加。
2026 年 10 月 9 日,在 macOS 15.7.7 上使用 Docker 29.1.3 进行只读检查,返回了 134 条构建缓存记录。其中 56 条符合上述统计条件,按 Docker 显示的大小合计约 11.6 GB。这是清理前的近似估算,没有执行删除,也不是已释放空间的结果。
预览数字用于判断是否值得处理,不是一份可以逐条勾选的缓存清单。执行时,Docker 按 builder prune --all 的规则决定哪些未使用的缓存可以移除;宿主机最终增加多少可用空间,还需要清理后另行检查。
先分清缓存和需要保留的数据
构建缓存保存了可以复用的构建步骤结果,帮助后续构建少做重复工作。项目、依赖或构建方式变化后,缓存也会变化;缓存占用较大,并不意味着 Docker 出了故障。Docker 构建缓存说明
| 内容 | 用途 | 本文的处理方式 |
|---|---|---|
| 构建缓存 | 复用构建步骤及相关数据 | 确认可接受重建成本后,按需清理未使用部分 |
| 镜像 | 创建容器所需的运行环境 | 保留,不随构建缓存一起清理 |
| 容器 | 运行或已停止的应用实例,可能含仍需保留的内容 | 保留;停止不等于可以删除 |
| 数据卷 | 持久保存数据库、上传文件等数据 | 保留,不按缓存处理 |
数据卷的生命周期独立于容器。即使当前没有容器使用它,里面也可能存着需要保留的数据,不能仅凭“未使用”就删掉。Docker 数据卷说明
同样,构建缓存是否值得保留,也要看接下来的工作。如果马上还要反复构建同一套项目,或要在离线环境中工作,保留缓存通常更合适。磁盘确实紧张、能够重新获取依赖时,再考虑清理。
用官方命令查看和清理
习惯命令行的用户,可以直接完成同样的检查。下面的命令显式使用 default,和上述 MangoDisk 条目保持一致。先查看连接配置,确认目标是本机 Docker 服务:
docker context ls
docker context inspect default
确认连接目标后,查看空间占用,再按需展开详细信息。这些命令只查看,不删除:
docker --context default system df
docker --context default system df --verbose
比较镜像、容器、数据卷和构建缓存的占用。如果最大的部分是数据卷,清理构建缓存就无法解决主要问题;应先确认卷中保存的是什么。Docker 空间占用命令说明
确认可以移除这个目标下所有未使用的构建缓存,并接受后续重建成本后,再执行:
docker --context default builder prune --all
--all 表示处理所有未使用的构建缓存,而不只是悬空缓存(dangling cache)。上面的手动命令没有加 --force,会保留 Docker 自身的确认提示。清理不经过回收站或废纸篓,缓存不能从其中恢复;后续构建需要重新生成相关数据。Docker builder prune 参数说明
MangoDisk 使用 --force 是为了在应用确认清理后执行命令,不会再弹出终端提示。它当前不提供按缓存年龄筛选或设置保留容量的选项;有这些需求时,可以参考官方命令参数单独处理。
只想清构建缓存时,不需要改用 system prune。它还会处理停止的容器、未使用的网络和镜像;加上 --volumes 后,还会涉及未使用的匿名卷。两者的范围不同,不能当作同一个命令替换。Docker system prune 范围说明
清理后检查缓存和磁盘占用
清理完成后,在同一个 context 下再次查看:
docker --context default system df
先比较构建缓存的占用,再查看系统的可用磁盘空间。以后再次构建时,Docker 可能重新执行部分步骤、下载依赖并生成缓存,这是正常行为。不要为了让缓存一直保持很小而每次构建完都清空。
如果使用 Mac 版 Docker Desktop,还要区分磁盘镜像的容量上限和实际占用。Docker Desktop 把 Linux 容器和镜像保存在磁盘镜像中,有些工具显示的是它的最大容量;可以在 Settings → Resources → Advanced 中查看实际占用和容量上限。Docker Desktop Mac 存储说明
不要把 Docker.raw 当作普通缓存文件删除,也不要为了让数字变小直接降低磁盘镜像容量上限。Docker 官方说明,降低上限会删除现有磁盘镜像,导致容器和镜像丢失。这与本文只清构建缓存的目标不同。
如果构建缓存已经不大,磁盘仍然很满,可以用 MangoDisk 的磁盘空间分析定位其他大目录。空间可能来自原始素材、旧项目依赖或其他工具的构建产物,需要按各自用途处理,不必反复清理同一项 Docker 缓存。
其他开发工具可以参考 npm 缓存与 node_modules 的区别、Cargo cache 与 target 文件夹的区别,也可以从开发者磁盘清理指南继续排查。
本文产品范围按 MangoDisk v1.1.7 说明。执行前可阅读安全清理指南,确认清理计划与需要保留的数据。
下载 MangoDisk,先查看 Docker 构建缓存的预计占用,再决定是否值得清理。镜像、容器和数据卷继续保留,后续构建的成本由你权衡。