Mac 上 Docker 占用磁盘空间太大:Docker.raw 详解
在 Mac 上,Docker 运行在一台虚拟机里,所有镜像、容器、卷和构建缓存都存在这台虚拟机的磁盘中,也就是一个大文件。
一句话:Docker Desktop 的磁盘是 ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw。不要删除它,而是在它内部释放空间:用 docker system df 查看里面有什么,再用 docker … prune 系列命令删除。
为什么 Docker.raw 看起来这么大?
它是一个稀疏文件:“访达”显示的是它最多可以增长到的大小(Docker Desktop 中设置的上限),而不是实际占用。要查看真实占用:
du -h ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
Docker 的空间都被什么占了?
docker system df
docker system df -v
第一条命令显示镜像、容器、本地卷和构建缓存,以及每一类可以回收多少空间。第二条逐个列出。
哪些命令能安全释放空间?
docker builder prune:没有被任何构建使用的构建缓存。之后第一次构建会慢一些。docker image prune:悬空镜像(重新构建后留下的无标签镜像)。加上-a会删除所有没有容器在用的镜像;需要时会重新下载。docker container prune:已停止的容器。写在容器内部、卷之外的任何内容都会丢失。docker volume prune:未使用的卷。小心:卷里存着数据库和其他数据。在较新的版本中,除非加上-a,它只删除匿名卷。docker system prune一次完成前三项;加上-a和--volumes会清理得更彻底。
prune 之后 Docker.raw 会变小吗?
通常会:因为它是稀疏文件,内部释放的空间会还给 macOS,有时要过几分钟。用上面的 du 命令再查一次。如果没有变小,退出并重新启动 Docker Desktop。
能限制 Docker 最多占用多少空间吗?
可以。在 Docker Desktop 中打开 Settings › Resources › Advanced,调低磁盘用量上限。如果调得比已存数据还小,可能需要重置 Docker 的数据。
应该删除 Docker.raw 吗?
只有在你打算丢掉 Docker 里的一切时才删:所有镜像、容器和卷。Docker Desktop 下次启动时会新建一个空的。Docker Desktop 中的 Troubleshoot › Clean / Purge data 能达到同样的效果,而且更干净。
OrbStack、Colima 和 Podman 的磁盘存在哪里?
- OrbStack:在
~/.orbstack下(或在其设置中选定的数据文件夹)。同样的docker命令对它也有效。 - Colima:Lima 虚拟机磁盘在
~/.colima下。colima delete会删除整个虚拟机。 - Podman:machine 磁盘在
~/.local/share/containers/podman/machine下;podman system prune在其内部释放空间。