多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Windows 11 下 Docker 的镜像/容器/卷数据 和 WSL 发行版存储位置修改到非系统盘

Windows 11 下 Docker 的镜像/容器/卷数据 和 WSL 发行版存储位置修改到非系统盘 Windows 11 下 Docker Desktop 用 WSL2 后端时Docker 的镜像/容器/卷数据和 **你自己安装的 WSL 发行版如 Ubuntu**是分开存储的需要分别迁移。下面按“先看清位置 → 再迁移”的顺序说明。一、先确认当前存放位置# 查看 WSL 发行版wsl-l-v# 查看 Docker 相关 vhdx 文件Get-ChildItem$env:LOCALAPPDATA\Docker\wsl-Recurse-Filter*.vhdx|Select-ObjectFullName,{nSizeGB;e{[math]::Round($_.Length/1GB,2)}}# 查看自定义发行版 vhdx以 Ubuntu 为例路径随发行版名称变化Get-ChildItem$env:LOCALAPPDATA\Packages-Recurse-Filterext4.vhdx-ErrorAction SilentlyContinue|Select-ObjectFullName,{nSizeGB;e{[math]::Round($_.Length/1GB,2)}}也可以看注册表里 WSL 发行版的BasePathGet-ChildItemHKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss|ForEach-Object{$pGet-ItemProperty$_.PSPath[PSCustomObject]{Name $p.DistributionName BasePath $p.BasePath}}典型默认位置内容默认位置Docker Desktop 程序/数据旧版%LOCALAPPDATA%\Docker\wsl\distro\ext4.vhdx、%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdxDocker Desktop 数据新版 4.30%LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx或类似Ubuntu 等自定义发行版%LOCALAPPDATA%\Packages\发行版包名\LocalState\ext4.vhdxDocker Desktop 4.30 之后把docker-desktop-data合并进了docker-desktop所以wsl -l -v里可能只看到一个 Docker 发行版。具体以设置界面显示的路径为准。二、迁移 Docker 数据推荐图形界面这是最安全的方式Docker Desktop 会自动搬迁并更新配置。退出所有容器关闭 Docker Desktop右下角托盘图标 → Quit Docker Desktop。打开 Docker Desktop →Settings → Resources → Advanced。找到Disk image location点Browse选择非系统盘目录例如D:\Docker\data点Apply restart。等待迁移完成数据量大时可能几分钟到几十分钟。启动后验证dockerinfodockerimagesdockersystemdf确认新位置工作正常后再删除旧位置的 vhdx 释放空间。如果目标目录不存在Docker Desktop 通常会提示或自动创建建议提前建好目录并确保目标盘是NTFS不要用 exFAT/FAT32。三、手动迁移 Docker 的 WSL 数据GUI 失败时备用⚠️ 新版 Docker Desktop 对发行版名称和启动逻辑有依赖手动迁移有风险优先用上面的 GUI 方式。以下方法适用于旧版或有经验的情况。# 1. 退出 Docker Desktop停止 WSLwsl--shutdown# 2. 查看发行版wsl-l-v# 3. 导出旧版通常有 docker-desktop 和 docker-desktop-datamkdir D:\WSL\Docker wsl--export docker-desktop-dataD:\WSL\Docker\docker-desktop-data.tar wsl--export docker-desktop D:\WSL\Docker\docker-desktop.tar# 4. 注销原发行版会删除原数据确认已导出成功wsl--unregister docker-desktop-datawsl--unregister docker-desktop# 5. 导入到新位置wsl--import docker-desktop-dataD:\WSL\Docker\docker-desktop-dataD:\WSL\Docker\docker-desktop-data.tar--version 2 wsl--import docker-desktop D:\WSL\Docker\docker-desktop D:\WSL\Docker\docker-desktop.tar--version 2# 6. 启动 Docker Desktop验证docker info新版 Docker Desktop4.30只有一个docker-desktop发行版且它同时承担程序和数据的角色。手动--import后 Docker Desktop 可能无法正确识别此时建议直接改回 GUI 的 Disk image location或重装 Docker Desktop 后重新设置。四、迁移自定义 WSL 发行版Ubuntu / Debian 等如果你把项目放在 WSL 里这个发行版的 vhdx 也会占用系统盘需要单独迁移。方法 AWSL 2.0 的--move最简单# 先更新 WSLwsl--update# 关闭所有 WSLwsl--shutdown# 移动发行版到新位置目标目录不要已存在或为空wsl--manage Ubuntu--moveD:\WSL\Ubuntu# 查看结果wsl-l-v方法 B导出再导入兼容旧版wsl--shutdown# 导出mkdir D:\WSL wsl--export Ubuntu D:\WSL\Ubuntu.tar# 注销原发行版确认导出成功后再执行wsl--unregister Ubuntu# 导入到新位置wsl--import Ubuntu D:\WSL\Ubuntu D:\WSL\Ubuntu.tar--version 2# 设置默认用户否则会以 root 登录ubuntu config--default-user 你的用户名# 或者进入后手动改 /etc/wsl.conf导入后进入发行版编辑/etc/wsl.conf固定默认用户[user] default你的用户名然后wsl--shutdown wsl-d Ubuntu迁移后启用稀疏文件节省空间WSL 2.0 支持wsl--manage Ubuntu--set-sparsetrue五、迁移 WSL swap 文件默认 swap 文件在系统盘可通过.wslconfig指定到非系统盘。编辑C:\Users\你的用户名\.wslconfig[wsl2] memory8GB processors4 swap2GB swapFileD:\\WSL\\swap.vhdx然后wsl--shutdownswapFile需要 WSL 2.0 支持路径用 Windows 格式目录需存在。不是所有版本都生效若无效可忽略swap 占用通常不大。六、验证迁移结果# WSL 发行版位置wsl-l-vGet-ChildItemHKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss|ForEach-Object{$pGet-ItemProperty$_.PSPath$($p.DistributionName)-$($p.BasePath)}# Docker 数据位置docker info|Select-StringDocker Root Dirdocker system df-vDocker Desktop 里也可以看Settings → Resources → Advanced → Disk image location是否已指向新盘。七、注意事项目标盘必须是 NTFS不要用 exFAT/FAT32也不要用网络盘或移动硬盘。优先 SSD机械盘会明显拖慢 Docker 构建和容器启动。迁移前备份重要镜像、卷和项目代码。可用dockersave-oapp.tar myapp:1.0.0dockerrun--rm-vmyvol:/data-v${PWD}:/backup alpinetarczf /backup/myvol.tar.gz-C/data.迁移前关闭 Docker Desktop 和所有 WSLwsl --shutdown。不要同时迁移 Docker 和 Ubuntu 到同一目录分开存放便于管理。迁移 Docker 数据后旧的 vhdx 不会自动删除确认新位置正常后再手动删。如果 Docker Desktop 启动异常可尝试退出 Docker →wsl --shutdown→ 重新启动 Docker Desktop仍不行则重装 Docker Desktop 并重新设置 Disk image location。迁移自定义发行版后Docker Desktop 的WSL Integration可能需要重新勾选Settings → Resources → WSL Integration。磁盘空间回收WSL 的 vhdx 只增不减可用wsl --manage distro --set-sparse true或在 WSL 内fstrim后压缩 vhdx。如果系统盘是 C:迁移后建议保留至少 20~30GB 空闲避免 Windows 更新和临时文件出问题。八、推荐目录规划示例D:\WSL\ ├── Ubuntu\ # 自定义发行版 ├── Docker\ │ ├── data\ # Docker Desktop Disk image location │ └── swap.vhdx # WSL swap └── Backup\ # 导出 tar 备份.wslconfig示例[wsl2] memory8GB processors4 swap2GB swapFileD:\\WSL\\swap.vhdx localhostForwardingtrueDocker Desktop 设置Settings → Resources → Advanced → Disk image locationD:\WSL\Docker\dataSettings → Resources → WSL Integration勾选需要集成 Docker 的发行版这样 Docker 镜像/容器/卷、WSL 发行版、swap 文件都落在非系统盘C 盘压力会小很多同时保留 WSL2 的性能。
返回列表