Levo 指南 · 开发者:其他工具

Mac 上 Docker 占用太多磁盘空间

Mac 上的 Docker 把所有内容都存放在一个大的虚拟磁盘文件 Docker.raw 中,这个文件只会变大,不会自己缩小。运行 docker system df 查看是什么在占用,然后用 docker system prune 和 docker builder prune 来释放。

Levo 的 Ready to free 列表,列出 Docker 镜像和构建缓存,每项都有大小和原因
内容如何查看能安全删除吗?
已停止的容器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

数据卷里存放着数据库、上传的文件,以及你的 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。区别在于磁盘存放的位置。

如果你完全不再使用 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 在那里同样适用。