Mac 上 Docker 太占空间?
2026年10月13日更新
Docker Desktop 把所有 Linux 镜像、容器、数据卷和构建缓存都存放在一个磁盘映像文件 Docker.raw 里,所以你拉取和构建得越多,它就越大。运行 docker system df 看看空间被什么占用,再用下面的 prune 命令删除未使用的容器、镜像和构建缓存;数据卷留到最后再处理,因为里面存着数据。
先说明一点:本站介绍的 Mac 应用 WTMemory 有意不清理 Docker 数据。Docker 自己的命令才是合适的工具,本指南就介绍这些命令。WTMemory 只能显示 Docker 的内存和 CPU 占用,以及磁盘上文件夹的大小。
Mac 上 Docker 的数据存放在哪里?
默认情况下,磁盘映像位于:
~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
如果你移动过它,Docker Desktop 会在 Settings > Resources > Advanced > Disk image location 中显示当前位置。Linux 虚拟机里的所有内容,包括镜像、容器、具名数据卷和构建缓存,都存在这一个文件里。你无法像普通文件夹那样在访达中浏览它。
Docker.raw 实际有多大?
Docker.raw 是一个稀疏文件。访达和一些工具报告的是它的最大尺寸,而不是它在磁盘上实际占用的空间。Docker 官方的 Mac FAQ 建议这样检查:
cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
ls -klsh Docker.raw
第一个数字是实际的磁盘占用;这一行后面的大小列是文件能增长到的最大值。如果访达显示 64 GB,而 ls -klsh 只报告几 GB,那你并没有少那么多空间。
怎么查看 Docker 的空间用在了哪里?
在 Docker 运行时执行:
docker system df
docker system df -v
第一条命令输出 Images、Containers、Local Volumes 和 Build Cache 的总量,还有一列 RECLAIMABLE(可回收)。-v 版本会列出每个镜像、容器和数据卷及其大小,让你看出哪个数据卷是那个 20 GB 的数据库,哪个镜像是你拉过一次就忘了的。
每条 prune 命令分别删除什么?
以下说明依据 Docker 的 pruning 文档,核对于 2026 年 10 月 13 日。除非加上 -f,每条命令都会先要求确认。
| 命令 | 删除的内容 | 风险 |
|---|---|---|
docker container prune | 所有已停止的容器。 | 低。写在已停止容器文件系统里(而不是数据卷里)的内容会丢失。 |
docker image prune | 仅悬空镜像(没有标签且未被使用)。 | 低。 |
docker image prune -a | 所有未被现有容器使用的镜像。 | 中。下次需要重新下载或重新构建。 |
docker buildx prune 或 docker builder prune | 悬空的构建缓存。加上 --all 则删除所有构建缓存。 | 低。下次构建会变慢。 |
docker system prune | 已停止的容器、未使用的网络、悬空镜像和未使用的构建缓存。不会动数据卷。 | 低到中。 |
docker system prune -a | 上述内容,外加所有未使用的镜像(不只是悬空镜像)。 | 中。 |
docker system prune --volumes | 额外删除未使用的匿名数据卷。 | 如果某个匿名数据卷里有你需要的数据,风险高。 |
docker volume prune | 未使用的匿名数据卷。具名数据卷不受影响。 | 对有数据的匿名数据卷来说风险高。 |
docker volume prune -a | 所有未使用的数据卷,包括具名数据卷。 | 最高。本地数据库就是这样没的。 |
数据卷警告:数据卷“未使用”只是说现在没有容器挂载它。如果你对一个带 Postgres、MySQL 或 MongoDB 服务的项目运行了 docker compose down,它的数据卷就处于未使用状态,但里面仍然存着数据库。prune 数据卷之前,先运行 docker volume ls,把你在意的东西备份好。
释放 Docker 磁盘空间的安全顺序是什么?
- 运行
docker system df -v,记下占用大的项目。 - 运行
docker container prune删除已停止的容器。 - 运行
docker buildx prune清理悬空的构建缓存,在经常构建的机器上,这往往是见效最快的一步。 - 如果不介意重新拉取镜像,运行
docker image prune -a。 - 逐个检查数据卷,用
docker volume rm <name>删除特定的数据卷,而不是盲目 prune。 - 再次用
ls -klsh检查 Docker.raw 的实际大小。
Docker 的 Mac FAQ 提到,在运行中的容器里删除文件时,空间并不总是会自动释放,所以文件可能不会立刻变小。
怎么限制 Docker.raw 的最大尺寸?
打开 Docker Desktop,进入 Settings > Resources > Advanced,调整 Disk usage limit,然后点击 Apply。Docker 的 FAQ 警告说,调小最大尺寸会删除当前的磁盘映像,所有容器和镜像都会丢失。请先备份数据卷。在同一部分,你还可以用 Docker Desktop 里的 Browse 选项把磁盘映像移到更大的硬盘上。不要在访达里移动它。
同一个 Resources 部分也可以设置虚拟机的内存上限。如果 Docker 占用的是大量内存而不是磁盘,就把这个上限调低;参见 如何查看 Mac 内存占用。
OrbStack 和 Colima 呢?
OrbStack 和 Colima 是在 Mac 上运行 Docker 容器的替代方案。它们把数据存放在各自的位置,而不是 Docker Desktop 的 Docker.raw 里,但同样的 docker system df 和 prune 命令对你的 docker CLI 当前指向的任何引擎都有效。用 docker context ls 查看当前指向的是哪个,磁盘设置请参考各工具自己的文档。
WTMemory 能清理 Docker 数据吗?
不能,这是有意为之。WTMemory 的清理范围包括受支持的 AI 模型文件夹和开发缓存,比如 Xcode DerivedData 以及 npm、pnpm、Yarn、Bun、Cargo 和 Gradle 缓存。Docker 虚拟机数据被排除在外,因为其中可能有数据库和无法重建的工作成果,而且只有 Docker 自己知道哪些部分可以安全删除。
它能免费做的事:
- Running Apps(运行中的 App)会把 Docker Desktop 和你的其他应用列在一起,显示内存、CPU、PID 和端口。每一行是一个进程,所以 Docker 的虚拟机和辅助进程实际占用的可能比这一行显示的多;要看全貌请用“活动监视器”。
- Disk Explorer(磁盘浏览器)是只读的。把它指向
~/Library/Containers这样的文件夹,可以比较各文件夹大小、找出最大的文件,然后在访达中显示它们。它从不删除任何东西。
WTMemory 是一款原生菜单栏 App,支持 macOS 12 及以上版本,兼容 Apple 芯片和 Intel 机型。查看功能免费;Pro 一次性 $9 USD,最多 3 台 Mac,提供 7 天试用。
常见问题
Mac 上 Docker 的数据存放在哪里?
Docker Desktop 把 Linux 镜像、容器、数据卷和构建缓存都放在一个磁盘映像文件里,默认路径是 ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw。确切位置可以在 Settings > Resources > Advanced 中查看。
删除 Docker.raw 安全吗?
不要在 Docker 运行时从访达里删除它。删除或重置它会清除所有镜像、容器和数据卷,包括数据卷里的数据库数据。请改用 prune 命令,或 Docker Desktop 自带的故障排除和重置选项。
docker system prune 会删除数据卷吗?
默认不会。docker system prune 会删除已停止的容器、未使用的网络、悬空镜像和未使用的构建缓存。加上 --volumes 还会删除未使用的匿名数据卷。具名数据卷只有通过 docker volume prune -a 或 docker volume rm 才会被删除。
为什么 prune 之后 Docker.raw 还是很大?
Docker.raw 是稀疏文件,访达和一些工具可能显示的是它的最大尺寸,而不是实际占用的空间。用 ls -klsh 查看实际占用。Docker 也提到,在运行中的容器里删除文件时,空间并不总是会自动释放。
WTMemory 能清理 Docker 数据吗?
不能。WTMemory 在设计上就把 Docker 虚拟机数据排除在清理范围之外,因为其中可能有数据库和其他无法重建的数据。它可以在 Running Apps 中显示 Docker 的内存和 CPU 占用,它只读的 Disk Explorer 可以显示文件夹大小。
资料来源,核对于 2026 年 10 月 13 日:Docker Desktop for Mac FAQ、Prune unused Docker objects、Docker Desktop settings。