K S*_*t X 163 docker windows-subsystem-for-linux wsl-2
我安装了 WSL 以及 Docker Desktop。
\n我尝试通过运行来尽可能多地清理docker
\ndocker system prune -a\n\ndocker volume rm $(docker volume ls -q -f dangling=true)\nRun Code Online (Sandbox Code Playgroud)\n然后我验证了
\n\xe2\x9d\xaf docker system df\nTYPE TOTAL ACTIVE SIZE RECLAIMABLE\nImages 0 0 0B 0B\nContainers 0 0 0B 0B\nLocal Volumes 0 0 0B 0B\nBuild Cache 0 0 0B 0B\nRun Code Online (Sandbox Code Playgroud)\n但是,我看到我还有近 12G 被 WSL 使用。
\n我假设这个文件与 docker 相关。尽管我移除了所有容器和卷,但为什么它仍然如此大?
\n如何缩小它(或者我可以删除它吗?)
\n\nScr*_*eCy 159
(2022 年 12 月更新)
diskpart现在,如果您通过删除任何不必要的文件释放了虚拟硬盘 (vhdx) 文件中的空间,则现在可以使用Windows 实用程序来收缩虚拟硬盘 (vhdx) 文件。我在本指南中找到了信息。
我将下面的说明要点仅供参考,但上面的指南更完整。
首先,通过打开管理员命令窗口并键入以下内容,确保关闭所有 WSL 实例:
>> wsl --shutdown
Run Code Online (Sandbox Code Playgroud)
验证一切都已停止:
>> wsl.exe --list --verbose
Run Code Online (Sandbox Code Playgroud)
然后启动diskpart:
>> diskpart
Run Code Online (Sandbox Code Playgroud)
和里面的diskpart类型:
DISKPART> select vdisk file="<path to vhdx file>"
Run Code Online (Sandbox Code Playgroud)
例如:
DISKPART> select vdisk file="C:\Users\user\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_12rqwer1sdgsda\LocalState\ext4.vhdx"
Run Code Online (Sandbox Code Playgroud)
它应该回应说
DiskPart successfully selected the virtual disk file.
然后缩小
DISKPART> compact vdisk
Run Code Online (Sandbox Code Playgroud)
此后,vhdx 文件的使用量应该会减少。就我而言,它从 40GB 增加到 4GB。您可以键入exit退出diskpart。
Zag*_*ags 144
如果您愿意擦除所有 Docker 数据,请打开 Docker Desktop 客户端,单击标题栏中的错误图标,然后单击Clean / Purge data。
Not*_*1ds 72
2023 年 9 月更新:据报道,新的 WSL 预发行版 (2.0.0) 为磁盘映像提供了新的“稀疏”模式,该模式将在删除文件时自动缩小映像。
虽然我还没有亲自测试过这一点,但从DevBlog 公告来看,您可以使用 PowerShell 中的以下命令将现有磁盘映像转换为稀疏磁盘映像:
wsl --manage <distro> --set-sparse true
Run Code Online (Sandbox Code Playgroud)
您还可以将以下内容添加到您的.wslconfig(位于 Windows配置文件目录中,而不是在 WSL 中)以使任何新创建的发行版映像变得稀疏:
[experimental]
sparseVhd=true
Run Code Online (Sandbox Code Playgroud)
对于“已发布”和早期版本的 WSL 仍然有用
简短回答:
diskpart或者Optimize-VHD可以使用命令行开关来收缩虚拟磁盘。 Optimize-VHD通常是首选,但仅在 Windows Pro 或更高版本下可用。详情请参阅下文。更多细节:
作为参考,有一个关于此主题的开放 Github问题。
WSL2 虚拟磁盘是“动态”.vhdx的,这意味着它们:
但是,当然可以手动优化它们。
步骤 0:对于正在阅读本文的其他人,请按照 OP 的指导,首先使用正常的 Docker 命令清理 Docker 数据。
接下来,在所有情况下:
wsl --shutdown从 PowerShell 或 CMD由于您已经删除了所有数据(容器、图像、卷),因此您可以完全删除图像:
卸载 Docker 桌面
来自 PowerShell:
wsl -l -v
# If they still exist, remove via ...
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data
Run Code Online (Sandbox Code Playgroud)
重要提示:请注意,这些都是破坏性操作,因此请确保您确实不需要 Docker Desktop 中的任何数据。
重新安装 Docker 桌面
对于那些需要保留数据但仍需要回收一些空间的人:
ext.vhdx作为备份。请注意,有报告称使用以下任一技术时会出现损坏。然后,正如该 Github 问题中的评论所述:
在 Windows Pro 上,您可以启用 Hyper-V 功能,然后Optimize-VHD根据原始 Github 问题在 PowerShell 中运行 cmdlet:
Optimize-VHD -Path .\ext4.vhdx -Mode full
Run Code Online (Sandbox Code Playgroud)
如果使用 Windows Home,则需要diskpart根据此注释使用 use 。
重新启动 Docker Desktop 并确认其正常运行并且所有预期数据都完好无损,然后再删除备份的ext4.vhdx.
小智 9
(2023 年 10 月更新)
wsl --shutdown
Run Code Online (Sandbox Code Playgroud)
Optimize-VHD -Path "${Env:LocalAppData}\Docker\wsl\data\ext4.vhdx" -Mode Full
Run Code Online (Sandbox Code Playgroud)
此命令使用 Optimize-VHD 工具来压缩 VHDX 文件。完成此命令后,您可以再次启动 Docker 和 WSL 2。
| 归档时间: |
|
| 查看次数: |
96066 次 |
| 最近记录: |