文章目錄
- Docker與WSL2如何清理
- 一、docker占據磁盤空間核心原因分析
- 1. WSL2 虛擬磁盤的動態擴展特性
- 2. Docker 鏡像分層緩存與未清理資源
- 二、解決方案
- 步驟 1:清理 Docker 未使用的資源
- 步驟 2:手動壓縮 WSL2 虛擬磁盤
- 1. 關閉 WSL2 和 Docker Desktop
- 2. 定位 `docker-desktop` 和 `docker-desktop-data` 路徑
- 3. 直接清理并重置(無重要數據)
Docker與WSL2如何清理
聲明,本方法僅適用于docker數據不重要的清理方式,本文沒有備份過docker數據,是本人清理自己電腦摸索出的方法,不要盲目模仿!!!
一、docker占據磁盤空間核心原因分析
1. WSL2 虛擬磁盤的動態擴展特性
WSL2 使用 .vhdx
虛擬磁盤文件(如 ext4.vhdx
或 docker-data.vhdx
)存儲數據。該文件會隨著數據增加自動擴容,但刪除數據后不會自動縮小,導致 C 盤顯示占用的空間遠大于實際使用量。
2. Docker 鏡像分層緩存與未清理資源
Docker 的鏡像、容器、構建緩存等資源會持續累積,即使刪除鏡像,其底層共享的“層”可能仍被其他鏡像引用而未被清理。
二、解決方案
步驟 1:清理 Docker 未使用的資源
通過 Docker 命令清理鏡像、容器、卷等殘留數據:
# 清理所有未使用的鏡像、容器、網絡、構建緩存和卷(強制模式)
docker system prune -a --volumes --force
# 單獨清理構建緩存(如使用 Buildx)
docker builder prune --force
步驟 2:手動壓縮 WSL2 虛擬磁盤
由于虛擬磁盤文件不會自動縮小,需手動壓縮:
1. 關閉 WSL2 和 Docker Desktop
wsl --shutdown
2. 定位 docker-desktop
和 docker-desktop-data
路徑
在 PowerShell 中命令如下:
Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" | ForEach-Object {$distro = (Get-ItemProperty $_.PSPath).DistributionName$path = (Get-ItemProperty $_.PSPath).BasePathWrite-Host "$distro 路徑: $path\ext4.vhdx"
}
若成功執行,輸出類似:
Ubuntu-22.04 路徑: C:\Users\YourName\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx
docker-desktop-data 路徑: C:\Users\YourName\AppData\Local\Docker\wsl\data\ext4.vhdx
docker-desktop-data 是 Docker 鏡像、容器和持久化數據的存儲核心,默認路徑為 C:\Users\<用戶名>\AppData\Local\Docker\wsl\data\ext4.vhdx
,隨著使用時間增長,該文件會持續占用 C 盤空間。
3. 直接清理并重置(無重要數據)
# 注銷分發版并刪除文件
wsl --unregister docker-desktop-data
Remove-Item "C:\Users\Peter\AppData\Local\Docker\wsl\data\ext4.vhdx" -Force
虛擬磁盤文件 ext4.vhdx
會重置為初始大小(約 1GB),C 盤空間立即釋放。