小白初学Docker时,反反复复下载和修改了很多镜像,导致镜像文件越来越大。
当C盘爆红了才搜罗解决办法,通过一下大佬的方法直接将C盘清出50G+!
1. 删除多余镜像和容器,并释放磁盘空间
空间不够了第一反应就是删掉没用的东西。
但删除过后发现 WSL 挂载目录的虚拟磁盘大小没有变化。
原因:不同于 WSL1,WSL2 本质上是虚拟机,所以 Windows 会自动创建 vhdx 后缀的虚拟磁盘文件作为存储。这个 vhdx 后缀的虚拟磁盘文件特点是可以自动扩容,但是一般不会自动缩容。一旦有很多文件把它“撑大”,即使把这些文件删除它也不会自动“缩小”。所以删除文件后还需要我们手动进行压缩才能释放磁盘空间。
解决方法:
1.1 找到要压缩的虚拟磁盘文件
如果你没更改挂载磁盘的位置,那默认位置在
C:\Users\ <你当前用户名> \AppData\Local\Docker\wsl\data\ext4.vhdx
1.2 关闭 Docker Desktop
在任务栏右下角右键单击 Docker Desktop 图标关闭 Docker 桌面,选择退出 Docker 桌面,等一会 Docker 图标没了之后,就证明 Docker 完全关闭了,然后,打开Powershell:
wsl --list -v
确保两个状态都已停止,如下图所示
如果这一步没关闭也没问题,最后所有操作结束后,重启 Docker Desktop 即可
1.3 压缩虚拟磁盘文件
继续在PowerShell中执行
# 关闭 WSL2 中的 linux distributions
wsl --shutdown
# 运行管理计算机的驱动器的 DiskPart 命令
diskpart
会新打开一个叫 DiskPart 的命令窗口,如下图:
在新打开的 DiskPart 命令窗口中执行:
# 选择虚拟磁盘文件
select vdisk file="步骤1.1虚拟磁盘文件的路径"
# 压缩文件
compact vdisk
# 压缩完毕后卸载磁盘
detach vdisk
上述操作执行完毕,WSL2 删除文件后空出来的磁盘空间就被释放了,可以去虚拟磁盘文件的路径看到 ext4.vhdx 文件大小已经减小。最后打开 Docker Desktop 可以看到原来镜像还在,成功解决问题。
2. 修改镜像文件存储位置
如果C盘还是爆红,那还是将Docker镜像文件移出C盘吧。
前面说过,WSL2模式下docker-desktop-data vm磁盘映像通常位于以下位置:
C:\Users\ <你当前用户名> \AppData\Local\Docker\wsl\data\ext4.vhdx
通过一下步骤可将其重新定位到其他目录,并保留所有现有的Docker数据
2.1 关闭 Docker Desktop
和1.2操作一样,右键单击Docker Desktop图标关闭Docker桌面,然后选择退出Docker桌面。
2.2 备份image及相关文件
默认情况下,Docker Desktop for Window会创建如下两个发行版(distro)
C:\Users\jayzhen\AppData\Local\Docker\wsl
docker-desktop (对应distro/ext4.vhdx)
docker-desktop-data (对应data/ext4.vhdx)
通常data/ext4.vhdx会随着使用而增大,按官网提示,vhdx文件最大可支持256G。
将docker-desktop-data导出到备份文件中,使用如下命令
wsl --export docker-desktop-data "D:\\docker-desktop-data.tar"
这里将备份文件docker-desktop-data.tar暂存在D盘下
2.3 wsl取消注册docker-desktop-data
请注意输入以下命令后,C:\Users\admin\AppData\Local\Docker\wsl\data\ext4.vhdx文件将被自动删除
wsl --unregister docker-desktop-data
2.4 将导出的docker-desktop-data再导入回wsl
该命令重新设置了路径,即新的镜像及各种docker使用的文件的挂载目录,我这里设置到F:\Docker-wsl\wsl
wsl --import docker-desktop-data "F:\Docker-wsl\wsl" "D:\\docker-desktop-data.tar" --version 2
操作完成就能在该目录下看到文件了,这时次启动Docker Desktop,一切正常
2.5 验证是否有效(选做)
可以pull一个镜像,查看目录大小变化。正常情况下C盘不会再增大了。