WSL2Docker释放磁盘空间
(2022-06-16 23:07:35)
标签:
docker |
分类: 虚拟化 |
Docker 使用久了,会残留很多中间生成的镜像,占用磁盘空间。
要清理 Docker 镜像,本来是挺简单的,一条命令就搞定了:
docker system prune
但是当在 Windows 中使用 WSL2 作为 Docker 后端引擎的时候,情况就会稍微复杂一些了。
原理
因为 WSL2 本质上来说是虚拟机,对于每个虚拟机,Windows 会创建 vhdx
后缀的磁盘镜像文件,用于存储其内容,类似于 vmdk、vdi,用过虚拟机的同学应该都不陌生。
这种镜像文件的特点是支持自动扩容,但是一般不会自动缩容。因此一旦 Docker 镜像文件过多,引起镜像扩容,即使再使用
docker system prune 清理虚拟机中的镜像文件,也不会释放出已经占用的系统磁盘空间了。
解决方案
镜像文件虽然一般不会自动压缩,但是支持手动压缩。
首先寻找到对应的镜像文件,在系统中搜索 ext4.vhdx 文件,可以搜索到多条记录,Docker 对应的镜像文件一般是在
C:\Users\<你的用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx
这个位置。
找到这个文件之后,进行压缩即可。
首先,删除 Docker 中的无用镜像:
docker system prune
然后退出 Docker Desktop 并关停 WSL2 实例。
wsl --shutdown
最后打开 Windows 中提供的 diskpart 工具进行压缩
# 代码来自
https://github.com/microsoft/WSL/issues/4699#issuecomment-627133168
diskpart
# open window Diskpart
select vdisk
file="`C:\Users\<你的用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx`"
attach vdisk readonly
compact vdisk
detach vdisk
exit
如此操作完成之后,就可以看到磁盘空间已经收回了。
后一篇:金蝶Kis系统客户不显示解决方法