现象

我在wsl中用到了docker进行一些测试,当测试完成后,将image删除,但是C盘并没有减少


原理

因为wsl用到了虚拟磁盘,而虚拟磁盘一般是动态扩容的,例如原来是10G,当里面空间不够的时候,会扩容到20G,但是当不需要这么多空间的时候,并不会自动收缩,这就导致了上面提到image删除后,并没有减少C盘的占用。


解决

知道了原理,方向就有了:对虚拟磁盘进行收缩操作

如下步骤:

1、先停掉wsl

a、停掉docker desktop

b、停掉wsl

wsl --shutdown

效果执行命令查看

wsl --list -v

2、压缩磁盘虚拟文件

文件的位置一般在  C:\Users\<你当前用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx

运行diskpart,会弹出新的专属命令窗口

diskpart

执行压缩

# 选择虚拟磁盘文件
select vdisk file="C:\Users\<你当前用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx"
# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach vdisk

结果

可以到虚拟磁盘文件的路径看看,这个时候应该已经减小

3、最后

重新运行docker desktop