Docker与WSL2如何清理

文章目录

  • Docker与WSL2如何清理
    • 一、docker占据磁盘空间核心原因分析
      • [1. WSL2 虚拟磁盘的动态扩展特性](#1. WSL2 虚拟磁盘的动态扩展特性)
      • [2. Docker 镜像分层缓存与未清理资源](#2. Docker 镜像分层缓存与未清理资源)
    • 二、解决方案
      • [步骤 1:清理 Docker 未使用的资源](#步骤 1:清理 Docker 未使用的资源)
      • [步骤 2:手动压缩 WSL2 虚拟磁盘](#步骤 2:手动压缩 WSL2 虚拟磁盘)
        • [1. 关闭 WSL2 和 Docker Desktop](#1. 关闭 WSL2 和 Docker Desktop)
        • [2. 定位 `docker-desktop` 和 `docker-desktop-data` 路径](#2. 定位 docker-desktopdocker-desktop-data 路径)
        • [3. 直接清理并重置(无重要数据)](#3. 直接清理并重置(无重要数据))

Docker与WSL2如何清理

声明,本方法仅适用于docker数据不重要的清理方式,本文没有备份过docker数据,是本人清理自己电脑摸索出的方法,不要盲目模仿!!!

一、docker占据磁盘空间核心原因分析

1. WSL2 虚拟磁盘的动态扩展特性

WSL2 使用 .vhdx 虚拟磁盘文件(如 ext4.vhdxdocker-data.vhdx)存储数据。该文件会随着数据增加自动扩容,但删除数据后不会自动缩小,导致 C 盘显示占用的空间远大于实际使用量。

2. Docker 镜像分层缓存与未清理资源

Docker 的镜像、容器、构建缓存等资源会持续累积,即使删除镜像,其底层共享的"层"可能仍被其他镜像引用而未被清理。

二、解决方案

步骤 1:清理 Docker 未使用的资源

通过 Docker 命令清理镜像、容器、卷等残留数据:

bash 复制代码
# 清理所有未使用的镜像、容器、网络、构建缓存和卷(强制模式)
docker system prune -a --volumes --force
# 单独清理构建缓存(如使用 Buildx)
docker builder prune --force

步骤 2:手动压缩 WSL2 虚拟磁盘

由于虚拟磁盘文件不会自动缩小,需手动压缩:

1. 关闭 WSL2 和 Docker Desktop
bash 复制代码
wsl --shutdown
2. 定位 docker-desktopdocker-desktop-data 路径

在 PowerShell 中命令如下:

bash 复制代码
Get-ChildItem "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss" | ForEach-Object {
    $distro = (Get-ItemProperty $_.PSPath).DistributionName
    $path = (Get-ItemProperty $_.PSPath).BasePath
    Write-Host "$distro 路径: $path\ext4.vhdx"
}

若成功执行,输出类似:

bash 复制代码
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. 直接清理并重置(无重要数据)
bash 复制代码
# 注销分发版并删除文件
wsl --unregister docker-desktop-data
Remove-Item "C:\Users\Peter\AppData\Local\Docker\wsl\data\ext4.vhdx" -Force

虚拟磁盘文件 ext4.vhdx 会重置为初始大小(约 1GB),C 盘空间立即释放。

相关推荐
贝锐21 分钟前
Docker部署Teemii本地漫画库,并通过花生壳内网穿透实现远程访问
docker
smaller_maple1 小时前
linux问题记录1
linux·运维·服务器
阿星智力囊3 小时前
Thinkphp6+nginx环境报错信息不显示,接口直接报500和CORS跨域(错误的引导方向),真坑啊
运维·nginx·php·thinkphp6
观测云3 小时前
Kubernetes CRD 方式配置容器日志采集最佳实践
容器·kubernetes·日志分析
i***22074 小时前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
大柏怎么被偷了5 小时前
【Linux】进程等待
linux·运维·服务器
云和数据.ChenGuang6 小时前
运维面试题之oracle和mysql单表最大容量
运维·mysql·oracle
酷柚易汛智推官6 小时前
Fastlane赋能移动研发:从全流程自动化到工程效能升级
运维·自动化·酷柚易汛
落798.6 小时前
Genlogin × Bright Data,一键解锁自动化采集的高成功率方案
运维·自动化·数据采集·亮数据
羑悻的小杀马特6 小时前
轻量跨云·掌控无界:Portainer CE + cpolar 让远程容器运维像点外卖一样简单——免复杂配置,安全直达对应集群
运维·网络·安全·docker·cpolar