Levo 指南 · 开发者:其他工具
Mac 上 Docker 占用太多磁盘空间
Mac 上的 Docker 把所有内容都存放在一个大的虚拟磁盘文件 Docker.raw 中,这个文件只会变大,不会自己缩小。运行 docker system df 查看是什么在占用,然后用 docker system prune 和 docker builder prune 来释放。

| 内容 | 如何查看 | 能安全删除吗? |
|---|---|---|
| 已停止的容器 | docker ps -a | 可以,除非你需要其中的内容 |
| 未使用的镜像 | docker images | 可以,需要时会重新拉取或构建 |
| 构建缓存 | docker builder du | 可以,下次构建会更慢 |
| 数据卷 | docker volume ls | 小心。数据库就存放在这里 |
| 磁盘文件 | ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw | 绝不要手动删除 |
为什么 Docker.raw 这么大
容器运行在一个小型 Linux 虚拟机里,虚拟机的磁盘就是你 Mac 上的一个文件。Docker Desktop 会设置一个最大容量,通常是 60 GB 或更多,随着你拉取镜像和构建,文件会朝这个上限增长。在访达中它看起来可能比实际大得多,因为它是稀疏文件:ls -lh 显示的是最大值,du -sh 显示的才是实际使用的大小。
问题在于,删除镜像只会释放虚拟机内部的空间,你 Mac 上的文件不会立刻缩小。较新版本的 Docker Desktop 会把释放的块交还给 macOS,但在旧配置下,或者经过大量读写之后,你可能需要在 Settings › Resources 中调整磁盘大小或将其重置。
自己动手清理
查看是什么在占用空间
docker system df
docker system df -v
第一条命令给出镜像、容器、数据卷和构建缓存的总量,并带有 RECLAIMABLE 列。第二条会逐项列出。构建缓存是最不起眼的:经过几周的构建,它往往是最大的一行。
释放空间
docker container prune
docker image prune -a
docker builder prune
docker system prune
docker container prune移除已停止的容器。docker image prune -a移除所有没有被容器使用的镜像,包括带标签的。不加-a时只移除悬空镜像。docker builder prune移除构建缓存。加上--all可以把带标签构建正在使用的缓存也包括进来。docker system prune一次性处理容器、网络、悬空镜像和构建缓存。除非加上--volumes,否则它不会移除数据卷。
数据卷里存放着数据库、上传的文件,以及你的 compose 文件挂载到命名数据卷的一切内容。docker system prune --volumes 会移除当前没有任何容器使用的所有数据卷,包括你下周要打开的那个项目的 Postgres 数据卷。用 docker volume ls 列出它们,确认后用 docker volume rm <name> 逐个移除。
把空间还给 macOS
清理之后,再检查一次实际大小。
du -sh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
如果它仍然很大,打开 Docker Desktop,进入 Settings › Resources,调低 Virtual disk limit,或者选择 Troubleshoot › Clean / Purge data 重新开始。第二个选项会删除你所有的镜像、容器和数据卷。Docker 运行时不要把 Docker.raw 拖到废纸篓:你会失去其中的一切,还可能损坏虚拟机。
OrbStack、Colima 和 Podman
同样的命令都可用,因为它们都使用 Docker API。区别在于磁盘存放的位置。
- OrbStack 会自动缩小它的磁盘,按需占用空间。它的数据位于
~/.orbstack。在 App 中查看 Settings,并像上面一样使用docker system df。 - Colima 把磁盘保存在
~/.colima下。大小在你用colima start --disk 100创建实例时就已固定。colima delete会移除整个虚拟机。 - Podman 使用
podman system df和podman system prune,其虚拟机映像位于~/.local/share/containers/podman/machine。
如果你完全不再使用 Docker,参见如何在 Mac 上卸载 Docker。想更全面地了解你其余的工具链,可以看开发者磁盘清理。
Levo 怎么做
Levo 在 Ready to free 中把 Docker 镜像和构建缓存列为单独的类型,附带大小和原因。它通过磁盘的实时索引找到它们,所以你无需运行任何命令就能看到,也不必记住该用四条 prune 命令中的哪一条。
由你的智能体判断什么是安全的。没有任何东西使用的镜像和构建缓存是常规的候选项。数据卷可能保存着无法找回的数据,所以请你自己查看,而且 Levo 绝不会清理任何正在使用的东西。智能体只读取,Levo 在再次检查后才执行删除。
你选择一个清理级别,勾选要清除的内容,然后点击 Clean up。如果你用 Levo 卸载 Docker Desktop,确认步骤会列出它较大的残留文件,让你在它们消失之前看到。参见面向 Web 开发者的 Levo。两次清理是免费的,之后是终身许可证。
常见问题
运行 docker system prune 安全吗?
对容器、网络、悬空镜像和构建缓存来说是安全的,但下次构建会更慢,有些镜像会被重新拉取。除非加上 --volumes,否则它不会动数据卷,而这个选项是需要小心的。
删除镜像后,Docker.raw 为什么仍然很大?
这个文件是稀疏文件,虚拟机内部释放空间后它并不总会缩小。用 du -sh 查看实际大小。如果仍然很大,请在 Docker Desktop 的 Resources 设置中调低虚拟磁盘上限,或清除它的数据。
可以删除 Docker.raw 吗?
只能在 Docker 运行时通过 Docker Desktop 的 Troubleshoot 菜单来做,或者在退出并卸载它之后。手动删除这个文件会移除其中所有的镜像、容器和数据卷。
Mac 上的 Docker 需要多少空间?
视你运行的内容而定。如果你要构建很多镜像,请预留 20 到 60 GB。Docker Desktop 中的虚拟磁盘上限决定了天花板。
OrbStack 比 Docker Desktop 占用的磁盘少吗?
通常是的,因为它按需增长和缩小,并与 macOS 共享文件。但它仍会保留镜像、构建缓存和数据卷,所以 docker system df 和 prune 在那里同样适用。