共计 1084 个字符,预计需要花费 3 分钟才能阅读完成。
WSL2 Docker释放磁盘空间
Docker在使用过程中,会残留很多中间生成的镜像文件,导致磁盘空间被占用。虽然在Docker中清理镜像比较简单,使用命令 docker system prune
就可以删除不再使用的容器、网络和镜像,但在WSL2环境中,情况会稍微复杂一些,因为WSL2本质上是一个虚拟机,每个虚拟机都会有一个扩容的磁盘镜像文件,这个文件不会自动压缩,导致空间无法回收。
原理
WSL2使用虚拟磁盘文件(.vhdx格式),这个文件会随着容器镜像的增加而扩容,但不会自动缩容。即使你删除了不需要的镜像,磁盘文件的大小不会立即缩减,仍然占用磁盘空间。
解决方案
1. 清理Docker镜像
首先,清理Docker中的无用镜像。使用以下命令:
docker system prune
这将删除所有未使用的容器、网络和镜像。你也可以加上 -a
参数来删除所有未被容器引用的镜像。
2. 关闭Docker并停止WSL2实例
清理镜像后,需要停止Docker和WSL2实例。可以使用以下命令:
wsl --shutdown
3. 压缩虚拟磁盘文件
WSL2的磁盘镜像文件支持手动压缩。通过以下步骤,压缩不再使用的空间:
使用Diskpart
- 打开命令提示符(以管理员权限运行)。
- 输入
diskpart
来启动Diskpart工具。 - 执行以下命令来选择并压缩磁盘:
select vdisk file="C:\Users\<你的用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
注意: <你的用户名>
需要替换为你自己的用户名。
使用PowerShell的Optimize-VHD命令
另一个方法是使用PowerShell的 Optimize-VHD
命令来压缩磁盘文件:
Optimize-VHD -Path "C:\Users\<你的用户名>\AppData\Local\Docker\wsl\data\ext4.vhdx" -Mode Full
这个命令同样可以帮助你缩小磁盘文件的大小。
4. 清理Build Cache
如果你的Docker构建过程中产生了缓存文件,也会占用大量磁盘空间。你可以通过以下命令清理Docker的构建缓存:
docker builder prune
这将删除所有未使用的构建缓存,释放磁盘空间。
结论
通过以上步骤,可以有效地释放WSL2环境中Docker占用的磁盘空间。清理Docker镜像、压缩虚拟磁盘文件以及清理构建缓存,都是常见的解决方法。对于磁盘空间不足的情况,及时进行清理和压缩是很有帮助的。