修复 Docker Desktop 在 windows 上的空间占用问题

Docker 使用一段时间后,磁盘空间占用越来越大,即使删除未使用的容器和镜像后硬盘空间依然不见减少。

此问题似乎出在 WSL 2 上面,在 GitHub 上此问题于 2019 年创建,至今(2024)微软依然没有解决。

空间占用原因

Docker 在 Windows 上依赖于 WSL 2。WSL 2 是一种轻量级的虚拟化技术,能够在 Windows 上运行 Linux 内核。 同时,运行时会生成一个 vhdx 文件(例如:ext4.vhdx ),此文件用于存储 Linux 发行版的文件系统镜像和相关数据。

但是,这个文件好像只会增长不会自动缩小,但是万幸的是可以手动释放。

清理 Docker 无用文件

几个常用的 Docker 清理命令:

删除停止的容器

docker container prune

此命令会删除所有已停止的容器。

删除未使用的镜像

docker image prune

此命令会删除未被任何容器使用的镜像。可以通过添加 -a 参数来删除所有未使用的镜像,包括被标记为 none 的镜像。

删除未使用的卷

docker volume prune

此命令会删除未被任何容器使用的数据卷。

删除未使用的网络

docker network prune

此命令会删除未被任何容器使用的网络。

删除所有无用资源

docker system prune

此命令会删除所有未被使用的容器、镜像、数据卷和网络。

优化 vhdx 文件

首先,以管理员身份运行 Windows PowerShell

关闭正在运行的 WSL 实例

wsl --shutdown

在只读模式下挂载 VHD

mount-vhd -Path .\ext4.vhdx -ReadOnly

优化 VHD,压缩和回收未使用的空间

optimize-vhd -Path .\ext4.vhdx -Mode full

最后,卸载 VHD

dismount-vhd -Path .\ext4.vhdx

注意:在 -Path 后面要跟自己的 ext4.vhdx 文件所在路径。另外,在 Windows 命令行中使用路径需要将反斜杠 \ 转义为 \\ ,因为在命令行中 \ 通常用作转义符。

例如:

mount-vhd -Path "C:\\Users\\<用户名>\\AppData\\Local\\Docker\\wsl\\data\\ext4.vhdx" -ReadOnly

更多内容可以参考微软的官方文档