1. 先问 Docker 自己的统计
永远从这里开始。它会分别列出镜像、容器、卷和构建缓存,并告诉你每一项有多少可以回收。
docker system df -v
Docker Desktop 把一切都放在一个文件里。你每构建一次它就变大,而删除镜像并不会让它变小。这里说明原因,以及什么才真正能拿回空间。
下载和扫描免费。 清理需要授权:每台电脑一次性付费,Mac 或 Windows 均可。

在 Mac 上,Docker Desktop 把一切都放在一台 Linux 虚拟机里,而这台虚拟机的整块磁盘就是一个稀疏文件:
~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
查看它真实的磁盘占用 —— 而不是逻辑大小,后者始终等于你允许 Docker 使用的上限:
du -h -d0 ~/Library/Containers/com.docker.docker/Data/vms/0/data/
删除一个镜像,空间确实会释放,但只是在虚拟机 内部 释放而已。你 Mac 上的那个文件还是原来那么大,因为 macOS 已经把这么多空间交给了它。较新版本的 Docker Desktop 会从虚拟机内部发出 TRIM,让 macOS 得以回收这些已释放的块,但这是按 Docker 自己的节奏进行的,而不是在你 prune 的那一刻。在那之前, docker system df 报告释放了好几 GB,而访达显示毫无变化。
按顺序:破坏性最小的在前。
永远从这里开始。它会分别列出镜像、容器、卷和构建缓存,并告诉你每一项有多少可以回收。
docker system df -v
在经常构建镜像的机器上,这通常是最大的单项,也是最安全可以移除的 —— 代价只是下一次构建更慢。
docker builder prune -a
已停止的容器、悬空镜像和未使用的网络:
docker system prune
加上 -a 还会移除所有未被运行中容器使用的镜像 —— 这意味着以后要重新拉取。只有在你确定时才加 --volumes : 数据库的数据就存在卷里,而这也是本页唯一一条会销毁你无法重新下载的东西的命令。
确认到底会删掉什么:
docker volume ls
docker volume ls -f dangling=true
清理之后,Docker Desktop 有一个官方方式来归还已释放的块: 设置 → 资源 → 高级 → 磁盘用量或者退出并重新打开 Docker Desktop,启动时会触发 TRIM。给它一分钟,再重新检查文件大小,然后再判断是否没生效。
在 设置 → 资源中,虚拟磁盘上限决定了 Docker.raw 允许长到多大。调低它本身不会释放任何空间,但能给问题设个上限。当初「以防万一」把它调高,正是这个文件涨到 64 GB 的原因。
设置 → 故障排查 → Clean / Purge data 会彻底重置虚拟机的磁盘,把文件恢复到接近零。它会删掉你所有的镜像、容器和卷。请在其他办法都无效、并且你清楚卷里有什么的时候再用。
不要在访达里删除 Docker.raw。 它不是缓存文件,而是整个 Docker 安装的数据;在 Docker 运行时删除它,可能让虚拟机进入一种反正也需要重置的状态。
在那台 Docker 涨到 50 GB 的 Mac 上,Xcode 的 DerivedData 和本地 AI 模型通常紧随其后。如果你要回收空间,值得一次性把整块磁盘量一遍,而不是一次修一样。 完整清单
Linux 上的 Docker 直接写入 /var/lib/docker,因此 prune 会立即释放空间,上面的 TRIM 问题也完全不存在。 Linux 磁盘清理
在访达里不安全,Docker 运行时也不安全。那一个文件就是你所有的镜像、容器和卷。如果你真的想从头开始,请用 Docker Desktop 的「故障排查 → Clean / Purge data」,它做的是同一件事,但方式是 Docker 认可的。
因为它释放的是虚拟机文件系统内部的 20 GB,而不是你 Mac 上的。在 TRIM 运行、macOS 回收这些块之前,文件都保持原来的大小。退出并重新打开 Docker Desktop 通常会触发它。
只有在你加上 --volumes时才会。不加这个参数,它不会碰卷。加上之后,任何未挂载到容器的卷都会被删除,而一个已停止的数据库的卷就算未挂载。
没有标准答案,但在有几个活跃项目的机器上,15 到 25 GB 属正常,60 GB 则意味着构建缓存从未清理过。先用 docker system df -v 查一下,再断定是镜像的问题。
更深入探讨本指南某一部分的短篇文章。