WSL2下Docker Desktop迁移到D盘:彻底解决C盘空间不足
自从开始用 WSL2 跑 DockerC 盘空间就见鬼一样地往下掉。一开始以为是镜像下多了清理几次发现根本治标不治本后来查了才发现问题出在根子上Docker Desktop 默认会把整个 WSL 发行版的数据放在C:\Users\用户名\AppData\Local\Docker\wsl这个目录下面而且是虚拟磁盘文件的形式。VHDX 这个文件的特点就是能自动增长但不轻易缩水如果你拉了几个大镜像这个文件能轻松膨胀到几十个 G再配合 WSL 本身的虚拟内存和缓存几百 G 的 C 盘瞬间就吃紧了。今天这篇就把我从 C 盘迁移 Docker Desktop 全部数据到 D 盘的完整过程说清楚包括原理、实操、坑和回滚方案尽量写得像我当初踩坑之后希望看到的那种保姆级教程。1. 先搞清楚数据到底存在哪里1.1 Docker Desktop 和 WSL2 的分工关系很多从 Windows 老版 Docker Toolbox 时代用过来的朋友对 Docker Desktop 有个常见的误解以为它就是个类似 VirtualBox 的虚拟机软件装的镜像都在虚拟机里跟 Windows 文件系统没关系。这个理解其实也不算全错只不过到了 WSL2 时代Docker Desktop 用的底层不是自己的管理程序而是 Windows 自带的 WSL2 功能。具体关系可以这样理解Docker Desktop 更像一个租客它跑在 WSL2 这个房子里面。WSL2 本身又是 Windows 内置的一个轻量虚拟机专门跑 Linux 内核。Docker 的所有容器、镜像、卷、构建缓存本质上都是 Linux 文件系统里的数据而这个 Linux 文件系统住在房子用的虚拟硬盘VHDX 文件里。所以问题就很清楚了想要把 Docker 的数据迁到别的盘关键不是改 Docker Desktop 设置里的那个Disk image location而是要动 WSL 发行版的注册位置。因为 Docker Desktop 自己创建的发行版叫docker-desktop你的容器数据都在这个发行版里。1.2 为什么直接删镜像治标不治本我见过不少朋友C 盘红了就开始手动清理镜像。用docker system prune把悬空镜像删掉再用docker system df看一眼发现释放了几个 G心里还挺美。但实际上那个ext4.vhdx文件不会因为你删了容器里的内容就自动缩小。我打个比方虚拟磁盘文件就像一条河里挖出来的蓄水池你往里面灌过多少水池子的堤岸就会修多宽。你把水抽掉了但堤岸还在空间又被池子占着。Docker 的虚拟磁盘也是这个逻辑镜像删了VHDX 文件依然保持之前扩展过的大小。你要是反复拉大镜像再删除VHDX 会变成一个虚胖的小胖子白白占着 C 盘空间。想要根治就得把整个 VHDX 文件挪出 C 盘让它以后只往别的盘增长。只要迁移一次再配合定期清理C 盘的压力就能彻底缓解。1.3 迁移的核心思路WSL 的导出和导入WSL 发行版的迁移在微软提供的最原始机制就是wsl --export和wsl --import。导出会生成一个 tar 包里面是完整的 Linux 文件系统导入的时候可以指定新盘符目录这样发行版的数据就从老的 VHDX 挪到了新的 VHDX 里。Docker Desktop 虽然会自动创建两个发行版但迁移逻辑通用。只不过步骤上比普通 WSL 发行版要复杂一点因为它还有个 Docker Desktop 主程序要处理而且 Docker Desktop 运行的时候会占用这些发行版不能直接迁移。实际操作中我建议的思路是这样的先停掉 Docker Desktop把 WSL 关掉然后找到 Docker 用来存放数据的发行版名导出再导入最后重新配置 Docker Desktop 的启动参数指向新的位置。2. 迁移前的准备工作和磁盘状态检查2.1 确认 Docker 和 WSL 的版本号动手之前先确认一下环境不同版本的 Docker Desktop 和 WSL 在细节上会有差异。打开 PowerShell执行wsl --version docker version如果wsl --version显示 WSL 1.x 或者没有显示具体子版本说明你可能还在用旧版 WSL建议先从启用或关闭 Windows 功能里把适用于 Linux 的 Windows 子系统和虚拟机平台勾上再升级到 WSL2。WSL 版本不要是 1.0 或者更老的 Preview 版我测试下来用 2.0 以上的版本做导出导入最稳。2.2 找到 Docker 相关的 WSL 发行版打开 PowerShell 输入wsl --list --verbose你会看到类似这样的输出NAME STATE VERSION * docker-desktop Stopped 2 docker-desktop-data Stopped 2早期版本 Docker Desktop 用的发行版名是docker-desktop和docker-desktop-data新版4.30 之后逐渐整合成一个docker-desktop包含了数据也在里面。但无论名字怎么变关键是你自己要能认出哪个发行版在承载镜像数据。如果分不清可以看发行版目录大小。在 PowerShell 里定位 VHDX 文件的位置Get-ChildItem -Path $env:LOCALAPPDATA\Docker\wsl -Recurse正常情况下你会看到C:\Users\你的用户名\AppData\Local\Docker\wsl\data\ext4.vhdx C:\Users\你的用户名\AppData\Local\Docker\wsl\disk\docker_data.vhdx这里面data\ext4.vhdx就是 Docker Desktop 用来放容器层、镜像层和卷的核心数据文件。disk\docker_data.vhdx是存储在 Docker Desktop 自身的数据新版本可能会看到不同的目录结构但原理一样。从这一步开始就请记住这个路径后面导出导入都跟它离不开。2.3 记录当前空间占用情况建议在迁移前先看一次数据体积一方面是评估迁移时间另一方面是迁移后做对比验证。PowerShell 命令Get-ChildItem -Path C:\Users\你的用户名\AppData\Local\Docker\wsl -Recurse | Measure-Object -Property Length -Sum输出里的 Sum 除以 1MB 或者 1GB就知道大概多大。30G 的数据导出可能要等 10-20 分钟耐心点。3. 方案选型先备份还是直接迁移3.1 我为什么不推荐直接用 Docker Desktop 设置里的 Disk image locationDocker Desktop 设置界面的 Resources Advanced 里确实有个Disk image location选项字面上看可以直接改虚拟磁盘位置。很多人的第一反应就是改这里但我要提醒你这个功能有历史遗留问题。在部分版本中修改了这个位置之后新数据会写到新路径但旧数据还在老路径你要自己手动搬。更麻烦的是如果你在迁移过程中改动了路径且没有完全退出 Docker Desktop可能导致新的发行版初始化失败Docker 起不来。我遇到过的最难缠的情况是设置好之后 Docker Desktop 提示Failed to mount WSL distro但 C 盘里面数据还在新位置又有新生成的一堆文件两头都乱。所以我最终的方案没有依赖那个选项而是走wsl --export/wsl --import的老路干净清爽可控性最强。3.2 备份优先原则可以这么说凡是涉及全量搬迁的操作没有备份就是耍流氓。Docker 数据虽然大部分是缓存和镜像但万一你有重要的容器数据卷丢了就真的没了。我的备份策略是直接复制ext4.vhdx文件到备份目录而不是做docker run方式的容器内备份。这样最接近磁盘级快照还原的时候只要把 VHDX 放回去就行。备份命令$backupDir D:\DockerBackup\wsl-backup New-Item -ItemType Directory -Path $backupDir -Force Copy-Item -Path C:\Users\你的用户名\AppData\Local\Docker\wsl\data\ext4.vhdx -Destination $backupDir\ext4.vhdx.bak备份时间取决于文件大小建议在跑备份的时候别同时拉镜像或者启动容器不然 VHDX 正在被写入会造成复制出来的文件不一致。3.3 迁移目标路径的选择建议新位置尽量不要放在系统盘C 盘上最好选一个固态硬盘的独立分区。D 盘如果是一块独立的 NVMe SSD是最理想的如果 D 盘和 C 盘是同一块物理硬盘上的两个分区那迁移的意义只剩下整理逻辑盘符对性能没有本质提升。还有一个小建议路径不要有空格不要用中文不要放在 WSL 的 UNC 路径下。比如D:\Docker\WSL这种就非常稳。之前有人把路径写成D:\Program Files\Docker Data导入时会出现各种转义字符问题折腾得不行。4. 实操步骤完整迁移 Docker Desktop 数据这一步我按照实验过的顺序一步一步写你照着做基本不会翻车。4.1 停止 Docker Desktop 和所有 WSL 实例关键点在于干净地退出而不是直接关掉右上角窗口。Docker Desktop 在托盘区域依然有后台进程直接退出窗口并不会停止 WSL 发行版你必须先设置退出时停止 WSL。先打开 Docker Desktop Settings General勾选Use the WSL 2 based engine和Start Docker Desktop when you sign in看你自己习惯但必须确认Use the WSL 2 based engine是开着的。然后退出 Docker Desktop右键托盘图标选择Quit Docker Desktop最好别直接点关闭按钮。退出后再打开 PowerShell执行wsl --shutdown这会把所有的 WSL 发行版全部关掉。为了确认没有进程占用再执行wsl --list --verbose看到所有 NAME 的 STATE 都是 Stopped就说明可以继续了。如果还有 Running等几秒或者重启一次 Windows 再操作强行继续容易失败。4.2 导出 Docker Desktop 的 WSL 发行版导出命令wsl --export docker-desktop-data D:\Docker\WSLBackup\docker-desktop-data.tar注意发行版名要写对。不同版本可能是docker-desktop-data也可能新版 Docker Desktop 把数据整合到了docker-desktop里但 Windows 版本不同名字会有差异。稳妥的做法是执行一次wsl --list --running wsl --list --all把看到的全部发行版名记录下来然后一个一个导出。导出过程会输出进度条速度取决于数据量大小和磁盘性能。如果是几十个 G可能要十分多钟期间不要关终端不要待机。导出完成后插一句如果你担心 tar 包完整性可以用dir看大小跟原 VHDX 文件的物理占用做个对比。tar 包一般会比 VHDX 文件小因为 VHDX 有未使用空间而 tar 是实际文件内容。4.3 注销旧的 WSL 发行版这一步不可跳过。如果不注销重新导入同名发行版会冲突系统会提示你distribution with the name already exists。命令wsl --unregister docker-desktop-data关于这条命令多说一句很多朋友不敢执行怕把 Docker 数据清空。实际上这个命令只是把 WSL 的注册信息从 Windows 里移除并且删除对应的虚拟磁盘文件引用并不会删除刚才导出的那个 tar 包。只要我们备份做完了这里就大胆执行。再补一句docker-desktop这个发行版不含 data 后缀的也建议注销。如果需要 Docker Desktop 重新生成我们可以通过重装或者重置来恢复但这两个发行版反正都会在新位置重建所以整体注销掉最干净。4.4 导入到新路径现在把 tar 包导回到新位置注意--import需要指定发行版名、新目录和 tar 包路径顺序别弄反。wsl --import docker-desktop-data D:\Docker\WSL\data D:\Docker\WSLBackup\docker-desktop-data.tar --version 2格式是wsl --import 发行版名 安装目录 tar文件 [--version 2]。这里有几个细节安装目录必须是空的如果D:\Docker\WSL\data已存在且有内容导入会报错。提前New-Item -ItemType Directory -Force建好目录但保证目录里没有任何文件。--version 2强制使用 WSL2虽然现在的默认版本基本已经是 2 了但加上这个参数更保险。导入成功后这个发行版会默认以 root 用户身份启动。Docker Desktop 对这个有特殊要求所以导入之后还要改一下默认用户。这个坑后面细说。对docker-desktop发行版如果有的话也做同样处理wsl --import docker-desktop D:\Docker\WSL\distro D:\Docker\WSLBackup\docker-desktop.tar --version 24.5 修改默认用户配置WSL 普通发行版在导入后默认用户是 root对 Docker Desktop 来说问题不大但有些版本的 Docker Desktop 会通过 WSL 里的 socket 通信用户不一致可能导致权限异常。如果导入后你执行wsl -d docker-desktop-data登录进去发现自己成了 root那就需要额外处理。但我在这里想说明一下实际操作中我们一般不手动登录 docker-desktop-data而是直接启动 Docker Desktop让它自己管理。所以默认是 root 还是你的用户名其实影响不大关键是 Docker Desktop 能否读到/var/run/docker.sock。不过如果你导入之后发现 Docker Desktop 起不来检查日志的时候发现权限相关的错误可以试试进入发行版执行echo -e [user]\ndefault你的用户名\n /etc/wsl.conf不是所有环境都需要这么做我在 Windows 11 上实测过不配也能正常用但提前给个备用方案总归是好的。4.6 启动 Docker Desktop 并验证迁移结果全部发行版导入完成后在开始菜单打开 Docker Desktop。这时 Docker Desktop 会自动启动 WSL 发行版并读取位于新路径D:\Docker\WSL\data\ext4.vhdx的数据。正常情况你会看到 Docker Desktop 的鲸鱼图标转一两圈变绿然后可以在终端执行docker ps docker images发现原来的容器和镜像我都在就说明迁移成功了一大半。此时再回 PowerShell 看 C 盘空间Get-ChildItem -Path C:\Users\你的用户名\AppData\Local\Docker\wsl -Recurse | Measure-Object -Property Length -Sum正常情况 C 盘原来的 ext4.vhdx 和 docker_data.vhdx 已经没有了因为 unregister 时删了剩下一些日志和配置文件体积很小。再确认新位置的磁盘占用Get-ChildItem -Path D:\Docker\WSL -Recurse | Measure-Object -Property Length -Sum对比数量级正确的话两者差距在一个合理的范围内D 盘这边的占用应该基本等于原来 C 盘那边的全部数据量。5. 踩坑实录迁移过程中遇到的那些坑实操过程中不可能一点问题没有下面几个是我自己踩过、以及朋友来找我帮忙时最常见的坎整理出来供大家少走弯路。5.1 WSL 版本过低导致 --import 失败有一回我在一台 Windows 10 老版本机器上做迁移执行wsl --import一直报The specified registry key could not be found排查下来是 WSL 内核太旧wsl --import功能不完整。解决办法是wsl --update或者去设置 应用 启用或关闭 Windows 功能里把适用于 Linux 的 Windows 子系统和虚拟机平台都勾上重启后再试。这个坑最隐蔽因为报错信息不提示版本只提示注册表缺失。5.2 Docker Desktop 起不来并报 Docker Engine stopped迁移后我启动 Docker Desktop发现鲸鱼图标一直是红色提示 Docker Engine stopped。打开日志文件%LOCALAPPDATA%\Docker\log\host\下的日志看到了类似Failed to mount WSL distro: An error occurred while accessing the WSL distro这个大概率是 __WSL 发行版内部损坏或者新路径的目录权限问题。我当时检查了 D 盘目录属性发现文件夹权限被某个安全策略限得死死的Docker Desktop 的进程无法写入 socket 文件。解决方法是把D:\Docker\WSL目录的权限给当前用户完全控制不行就直接给Authenticated Users完全控制。另外确认你的新路径没有启用压缩内容以节省磁盘空间或者加密内容选项右键目录 属性 高级把那两个勾去掉。这个细节很少人提但真的会因为文件级别的压缩加密导致 Docker 读取 VHDX 时各种奇怪报错。5.3 容器数据还在但端口映射过不去迁移完成后docker ps -a能看到容器但访问端口发现不通进入容器日志也正常。我当时一度以为网络参数丢了。后来发现这是因为我导入了发行版之后WSL 的 IP 地址发生了变化Docker Desktop 里某些基于 IP 的代理配置失效了。所以 Docker Desktop 里的Resources Network设置要重新确认尤其是自定义了 DNS 或者 HTTP 代理镜像加速的建议清空重启再配置一次。5.4 怎样验证数据卷是否真的完整最靠谱的验证方式不是光看镜像列表而是挑一个有数据卷的容器去容器里创建一个标记文件然后在 Windows 上确认文件出现在容器卷对应的物理路径中。或者更简单点让容器写入数据然后在新路径下的 ext4.vhdx 里面使用 wsl 命令行进入发行版查看wsl -d docker-desktop-data ls -lah /var/lib/docker/volumes/如果你能看到原来的卷目录且里面文件时间戳没变说明备份完整。我迁移完专门把一个生产模拟项目的 MySQL 容器数据卷docker inspect确认Mounts里挂载点还在再启动容器跑了一个查询完美通过。6. 迁移后可以做的事情彻底瘦身 C 盘6.1 压缩老 VHDX 文件如果还在的话有一种情况是你没走unregister而是直接把 ext4.vhdx 复制到新盘再修改 Docker Desktop 设置路径。这种情况下 C 盘残留的老 VHDX 虽然不再写入但文件大小依然很大螺纹。想压缩它可以在 WSL 里执行sudo fstrim -v /然后回 Windows 用管理员 PowerShellOptimize-VHD -Path C:\路径\ext4.vhdx -Mode Full前提是系统装了 Hyper-V 模块。不过么如果你已经按我前面第 4 步做了完整的导出导入C 盘的旧 VHDX 已经被自动删掉了这一步可以省略。6.2 定期清理 Docker 垃圾数据迁移之后C 盘虽然就安全了但 Docker 数据如果一直不清理D 盘迟早也会爆。我自己的习惯是每两周执行一次docker system prune -a --volumes这个命令会删除所有未使用的镜像、容器、网络和卷。注意--volumes会连没有容器引用的卷一起删如果卷里有重要数据执行之前先用docker volume ls检查一下。再设置日志驱动限制防止容器日志无限增长。在daemon.json里加上{ log-driver: local, log-opts: { max-size: 10m, max-file: 3 } }这样单容器日志最多占 30M再也不怕日志把磁盘塞满了。6.3 通用建议给 WSL 设置磁盘配额上限WSL2 的 VHDX 默认是动态扩展可以无限增长直到占满整个物理磁盘。如果你担心 D 盘空间失控可以在发行版内设置 ext4 配额。通过/etc/wsl.conf添加[automount] enabled true options metadata,umask22,fmask11但真正的容量限制得靠 Windows 侧搞wsl --manage子命令并不存在太多选项目前最简单的控制手段其实是自己定期检查 D 盘容量或者把 Docker Root Dir 的手动路径指到独立分区。对我来说只要数据不在 C 盘空间焦虑就少了一大半剩下的靠清理习惯就够了。7. 结合 WSL 特性的进阶优化7.1 把 Docker Root Dir 手动指到新盘刚才的方案是把整个 WSL 发行版搬走还有一种更轻量、更Docker 原生的思路修改 Docker 运行时的工作目录。在 Docker Desktop 设置里Resources Advanced Disk image location改到D:\Docker\DockerData然后重启 Docker Desktop。这个方案对 Docker Desktop 新版本来说是比较正规的迁移路径但有一个前提它只管 Docker 自己的数据不管 WSL 发行版本身。如果 WSL 发行版或者某一时刻你手动创建的 WSL 发行版在 C 盘那 C 盘依然有增长点。所以我个人建议的做法是如果完全是 Docker 用就用 WSL 迁移方案一劳永逸如果还要跑别的 WSL 发行版比如拿 Ubuntu 做开发环境再单独对待。7.2 把 WSL 自身的 distro 目录搬到新盘如果你除了 Docker Desktop 之外还手动装过 Ubuntu 之类的发行版想整体搬走可以走同样的wsl --export/wsl --import流程。比如wsl --export Ubuntu D:\WSL\Backup\ubuntu.tar wsl --unregister Ubuntu wsl --import Ubuntu D:\WSL\Ubuntu D:\WSL\Backup\ubuntu.tar --version 2不过在导入 Ubuntu 时默认用户会变成 root需要手动恢复echo -e [user]\ndefault你的用户名\n /etc/wsl.conf然后重启发行版wsl --terminate Ubuntu wsl -d Ubuntu你会发现用户已经变回来了Bash 里的 PATH、环境变量等也能正常加载。7.3 使用符号链接迁移部分目录的备选思路有人问过我能不能直接创建符号链接把C:\Users\你的用户名\AppData\Local\Docker\wsl指向 D 盘目录理论上mklink /J可以做 junction目录联接但 Docker Desktop 更新时会重新创建目录结构而且 WSL 服务启动时如果读不到正常的注册表项可能产生当前目录不存在的错误。我试过一次Docker Desktop 启动时直接报错随后自己修复成了老目录。因此这个办法看起来简单实际上非常脆不推荐新手尝试。如果非要用得记住先停掉 Docker 和 WSL用完好的 VHDX 文件搬到 D 盘再建 junction。但既然走这个流程了不如干脆导出导入一了百了还顺便把发行版文件整理干净了。8. 常见问题排查速查表写到这里我把迁移中遇到的高频问题整理成一张速查表方便你出问题时直接对号入座。问题现象可能原因处理方法wsl --import报 registry key errorWSL 内核版本太老wsl --update后重试或升级 Windows 系统Docker Desktop 启动后显示 Engine stoppedWSL 发行版无法挂载VHDX 损坏检查目录权限重设 VHDX必要时从备份恢复迁移后docker ps能看到容器但端口不通WSL2 IP 变化代理或网络配置失效重新设置 Docker 网络、代理配置重启 DockerC 盘空间没减少旧的 VHDX 文件没删或 Docker 还在 C 盘写了新数据确认wsl --unregister已执行检查 Docker 设置容器里数据不完整导出前容器还在运行数据未刷入磁盘导出前先wsl --shutdown确认所有发行版 Stopped导入后无法用普通用户身份进入发行版WSL 默认用户变成了 root修改/etc/wsl.conf配置默认用户Docker Desktop 更新后自动回退到 C 盘Docker 安装目录或设置被默认值覆盖更新后检查Disk image location和 WSL 注册列表这张表没法覆盖所有稀奇古怪的报错但 90% 的情况都落在这些框框里。如果遇到完全不认识的错误第一件事就是看日志Docker Desktop 的日志在%LOCALAPPDATA%\Docker\log\host\下WSL 的问题多用wsl --debug或者 Windows 事件查看器里的Hyper-V 虚拟机日志。9. 后迁移期的观察与还原方案9.1 迁移后 Docker Desktop 升级的影响Docker Desktop 每一次升级都可能重新创建 WSL 发行版或者修改配置文件但不是每次都会把一个好好的迁移结果推翻。我经历的大版本升级升级完成后 Docker 依然能正常读 D 盘的数据因为发行版的注册表信息没有变VHDX 文件自然还在原路径读取。但不排除个别版本更新后Docker Desktop 的安装程序会在旧的路径重新生成一个发行版导致 C 盘有残留。所以每次 Docker Desktop 升级后我建议看一次wsl --list --verbose如果出现了名字相同但新的发行版再确认%LOCALAPPDATA%\Docker\wsl\data下的 VHDX 是否还在如果出现说明 Docker 又重建了数据目录这时候就要考虑把旧目录清理掉或者再做一次迁移。9.2 如何回滚到迁移前状态如果有人担心迁移失败想后退只要你有备份的 tar 包和备份的 VHDX 文件回滚其实非常快。步骤如下退出 Docker Desktop托盘右键 Quit。执行wsl --shutdown。注销当前的 docker-desktop-datawsl --unregister docker-desktop-data。用备份的 tar 包重新导入到原来的 C 盘路径wsl --import docker-desktop-data C:\Users\你的用户名\AppData\Local\Docker\wsl\data D:\DockerBackup\wsl-backup\docker-desktop-data.tar --version 2。启动 Docker Desktop。如果 tar 包也没了只有 VHDX 备份可以直接把 VHDX 放回原目录然后重新注册发行版但这个操作需要手工编辑注册表很麻烦。所以再次强调tar 包备份是回滚的生命线别删。9.3 多磁盘用户的一条额外建议如果你的机器有三块硬盘例如 C 盘是系统盘、D 盘是常用软件盘、E 盘是大容量机械盘建议把 Docker 数据放在 SSD 上哪怕是小容量的 SSD。Docker 对存储性能很敏感容器 IO 频繁的应用如果放在机械盘上你会明显感到拉镜像、启动容器变慢数据库类型的容器更明显。我实测过同样一个 MySQL 容器从 NVMe 迁到机械盘查询延迟翻了好几倍。如果只有一块机械盘但 C 盘已经满了那也别纠结性能先把数据迁出去保住系统盘再说Docker 卡一点总比系统崩溃好。10. 关于自动化和监控的补充经验10.1 写一个清理脚本防止 D 盘被慢慢吃满迁移完成之后平时的维护也需要一点自动化。我自己在 Windows 的计划任务里挂了一个 PowerShell 脚本每周检查一次 Docker 相关目录的占用如果磁盘剩余空间低于某个阈值就自动执行一些常规清理任务。简单脚本示例$thesholdGB 20 $drive Get-PSDrive -Name D $freeGB [math]::Round($drive.Free / 1GB, 2) if ($freeGB -lt $thesholdGB) { docker system prune -f docker image prune -a -f }大多数情况下直接手动执行也行但配上计划任务能避免一些不知不觉就满了的情况。10.2 监控 WSL 虚拟磁盘增长趋势VHDX 文件增长跟容器使用习惯强相关。你有空可以在 PowerShell 里写个一行命令看看趋势Get-ChildItem D:\Docker\WSL\data\ext4.vhdx | Select-Object Name, {NameSizeGB;Expression{[math]::Round($_.Length/1GB,2)}}, LastWriteTime隔一段时间看一次如果发现 VHDX 增长极快大概率是日志或者临时文件没限制好回到第 6 节把日志驱动限制配置上或者排查哪个容器一直在产生大数据。10.3 容器数据备份方案简谈最后再聊一聊更长远的数据安全。迁移只是把数据从一个盘挪到另一个盘并没有新增冗余。如果你跑的是正式项目建议在 Docker 之外再做一层备份。最粗暴的方法是定期docker commit但说实话并不推荐。更稳的是对容器挂载的数据卷做文件级备份或者用专门的备份工具。我一般每周末对 Docker 数据目录打一个 tar 包到 NAS 或者移动硬盘命令很简单同样要先把docker-desktop-data停掉或者用wsl --shutdown保证一致性wsl --export docker-desktop-data E:\DockerBackup\docker-data-weekly.tar只要有这个 tar不管 Docker Desktop 怎么坏、Windows 怎么出问题你都能随时恢复到上一个可用状态。别嫌笨这种原始手段往往最可靠。结尾从 C 盘点爆红到逐步排查 VHDX 占用再到导出、注销、导入、配置权限中间踩过版本太老、目录权限、IP 变更这些坑最终把 Docker Desktop 整个搬到了 D 盘。说句实在话搞完之后我心里那块石头就算落地了之后每次看到 C 盘剩余空间稳步回归到三位数都觉得这个折腾值。我个人实际操作中的几个习惯供你参考迁移之后不要马上删备份 tar 包至少留一个月等 Docker Desktop 升级过一两次确认一切稳定再清理平时多留意docker system df的输出它比 Windows 的存储设置更懂 Docker 的空间管理再就是尽量不给 C 盘留任何可能膨胀的虚拟磁盘不管它是 WSL 还是别的虚拟机。磁盘空间这种东西等它满了再救远不如提前布局省心。希望这篇迁移手记能帮你把 Docker 的数据安安稳稳地从 C 盘挪出去少走一段我当初反复折腾的弯路。

相关新闻

AI从动口到动手:以养虾为例的器官移植与落地实践

AI从动口到动手:以养虾为例的器官移植与落地实践

AI圈最近都在聊一个很有意思的趋势:AI正在从“动口”往“动手”的方向狂奔。过去一年大家熟悉的ChatGPT、文生图、数字人,本质上是让AI学会了“说话”和“表达”,但真要让AI去拧阀门、开增氧机、喂饲料、处理突发状况,完全是另一码…

2026/10/17 9:18:34 阅读更多 →
Superpowers Skills 上手清单 + 完整指南:把 settings 改到 TaoToken 的 AI 编程工作流

Superpowers Skills 上手清单 + 完整指南:把 settings 改到 TaoToken 的 AI 编程工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 13:57:49 阅读更多 →
UEFI双系统重装Win10后GRUB消失?手把手恢复启动控制权

UEFI双系统重装Win10后GRUB消失?手把手恢复启动控制权

1. 项目概述:双系统重装Win10后GRUB消失,不是“引导坏了”,而是“引导权被悄悄移交了”你刚在一台原本装着Ubuntu Windows 10 双系统的笔记本上,为了彻底解决某个顽固蓝屏问题,决定重装Windows 10。安装过程很顺利——…

2026/10/17 9:18:34 阅读更多 →

最新新闻

78B多模态大模型如何落地?InternVL2_5-78B-MPO多卡部署与省显存量化完整攻略

78B多模态大模型如何落地?InternVL2_5-78B-MPO多卡部署与省显存量化完整攻略

【免费下载链接】InternVL2_5-78B-MPO 项目地址: https://ai.gitcode.com/OpenGVLab/InternVL2_5-78B-MPO 点击查看 免费下载 InternVL2_5-78B-MPO 是一款基于 ViT-MLP-LLM 架构的开源多模态大模型,融合了 6B 视觉编码器 InternViT 与 72B 语言模型 Qwe…

2026/10/18 23:08:17 阅读更多 →
定长140字节上报协议n值解析:字段偏移、熵值定位与纯算还原

定长140字节上报协议n值解析:字段偏移、熵值定位与纯算还原

简介:这是一份阿里140-n值纯算生成逻辑的代码解析包,面向反爬虫工程师、前端加密研究者与算法学习者。包内完整呈现n值生成全链路:从自定义base64加密算法入手,逐步拆解Ye、ke、B、u四个核心数组的来源与组装规则,涵盖…

2026/10/18 23:08:17 阅读更多 →
无监督深度单应性估计:PyTorch实战与几何建模原理

无监督深度单应性估计:PyTorch实战与几何建模原理

1. 项目概述:为什么“无监督深度单应性估计”值得你花30分钟认真读完“Unsupervised Deep Homography - Pytorch实现”——这个标题里藏着计算机视觉领域一个非常典型的“理想与现实撕扯点”。单应性(Homography)是什么?简单说&am…

2026/10/18 23:08:17 阅读更多 →
AUBO i5与D435i抓取实践:手眼标定、点云分割与避坑指南

AUBO i5与D435i抓取实践:手眼标定、点云分割与避坑指南

简介:面向机械臂视觉抓取开发者的可运行源码包,整合aubo i5机械臂与Intel RealSense D435i深度相机的识别抓取实践。压缩包仅6KB,内含3个文件,以html说明与inscode工程配置为主,附带gitignore版本管理配置,…

2026/10/18 23:08:17 阅读更多 →
Agent Skill 完全指南:让 AI 智能体“一次学会,处处复用“

Agent Skill 完全指南:让 AI 智能体“一次学会,处处复用“

目录 一、 Agent Skill入门 1.1 Agent Skill 到底是什么? 1.2 Agent Skill长什么样? 1.2.1 文件架构 1.2.2 SKILL.md文件格式 (1) Frontmatter字段 (2) Body content 1.2.3 Skill Demo 二、怎么用Agent Skill? 2.1 安装Agent 2.2 …

2026/10/18 23:08:17 阅读更多 →
推荐一个适合学习AI Agent开发的AI智能体开源项目:用TaoToken统一Key跑通DeepAgent实战

推荐一个适合学习AI Agent开发的AI智能体开源项目:用TaoToken统一Key跑通DeepAgent实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 23:07:17 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →