修复 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
更多内容可以参考微软的官方文档。