压缩WSL2-Docker虚拟磁盘文件

解决 Windows 删除 docker 容器后 WSL2 磁盘空间不释放的问题

转载自:【已解决】Windows 的 docker 删除容器后 WSL2 磁盘空间不释放的问题

不同于 WSL1,WSL2 本质上是虚拟机,所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容,但是一般不会自动缩容。一旦有很多文件把它“撑大”,即使把这些文件删除它也不会自动“缩小”。所以删除文件后还需要我们手动进行压缩才能释放磁盘空间。

找到要压缩的虚拟磁盘文件

如果你没更改挂载磁盘的位置,那他位置在 C:\Users\<你当前用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx ,记下路径,后面要用到。

关闭 Docker Desktop

在任务栏右下角右键单击 Docker Desktop 图标关闭 Docker 桌面,选择退出 Docker 桌面,等一会 Docker 图标没了之后,就证明 Docker 完全关闭了,然后,打开命令提示符:

1
2
3
4
5
6
7
 wsl --list -v
 
   NAME                   STATE           VERSION
 * Debian                 Stopped         2
   docker-desktop         Stopped         2
   Ubuntu-22.04           Stopped         2
   docker-desktop-data    Stopped         2

确保 docker-desktopdocker-desktop-data 均处于 stopped 状态。 如果这一步没关闭也没问题,最后所有操作结束后,重启Docker Desktop 即可。

压缩虚拟磁盘文件

在PowerShell内执行:

1
2
3
4
 # 关闭 WSL2 中的 linux distributions
 wsl --shutdown
 # 运行管理计算机的驱动器的 DiskPart 命令
 diskpart

会启动新窗口,在新窗口内执行:

1
2
3
4
5
6
 # 选择虚拟磁盘文件
 select vdisk file="就是步骤2.1虚拟磁盘文件的路径"
 # 压缩文件
 compact vdisk
 # 压缩完毕后卸载磁盘
 detach vdisk

上述操作执行完毕,WSL2 删除文件后空出来的磁盘空间就被释放了,可以去虚拟磁盘文件的路径看到 ext4.vhdx 文件大小已经减小。最后打开 Docker Desktop 可以看到原来镜像还在,成功解决问题。

转载自:【已解决】Windows 的 docker 删除容器后 WSL2 磁盘空间不释放的问题

Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计