摘要(Snippet)

在 Windows 11 中,Docker Desktop 基于 WSL2 运行,其镜像与容器数据实际存储于 docker-desktop-data 发行版的 ext4.vhdx 文件中。只要在首次写入 Docker 数据前,通过 wsl --import 正确初始化该发行版,即可从源头将 Docker 数据盘固定到指定磁盘(如 F 盘),避免 C 盘被长期占用。


一、为什么 Docker Desktop 会“悄悄吃满 C 盘”

很多用户在 Windows 上使用 Docker Desktop 一段时间后,才发现:

  • C 盘空间持续减少
  • Docker 设置中却找不到明确的“数据盘路径”
  • 即使 Docker Desktop 安装在 D / F 盘,问题依旧存在

这并不是 Docker 的“隐藏行为”,而是 Docker Desktop + WSL2 架构本身的工作方式


二、Docker Desktop 在 Windows 11 中的真实运行结构

2.1 Docker 并不是直接运行在 Windows 上

在 Windows 11 中,Docker Desktop 默认采用 WSL2 后端。这意味着:

  • Docker Engine 实际运行在一个 Linux 内核中
  • 该 Linux 内核由 WSL2 提供
  • Docker 的文件系统并不直接映射到 Windows 目录

docker info 的真实输出可以清楚看到这一点:

Operating System: Docker Desktop
Kernel Version: 6.6.87.2-microsoft-standard-WSL2
Docker Root Dir: /var/lib/docker

这说明:

  • /var/lib/dockerLinux 内部路径
  • Windows 中看到的,只是一个虚拟磁盘文件

2.2 docker-desktop 与 docker-desktop-data 的区别

wsl --list -v 中,Docker Desktop 会使用两个发行版:

发行版名称 作用 是否存储数据
docker-desktop 运行 Docker Engine
docker-desktop-data 存储镜像、容器、Volume

关键点在于:

docker-desktop-data 并不会在安装 Docker Desktop 时立即创建

它只会在 第一次真正写入 Docker 数据(如 pull 镜像)时 被自动生成。


三、一个“理想起点”的系统状态是什么样的

以下状态,恰恰是最理想、最干净的起点:

wsl --list -v

NAME              STATE     VERSION
docker-desktop    Running   2

并且:

docker info
Images: 0
Containers: 0

这意味着:

  • Docker Desktop 已启动
  • docker-desktop-data 尚不存在
  • C 盘尚未生成任何 Docker 数据盘

此时进行存储规划,零迁移成本,零风险


四、为什么不需要安装 Ubuntu,也不需要 Microsoft Store

在实际操作中,常见误区包括:

  • 尝试 wsl --install -d Ubuntu-22.04
  • 打开 Microsoft Store 下载 Ubuntu
  • 查找 Ubuntu rootfs 镜像站点

但这些步骤在本场景中 完全不必要

原因很简单:

docker-desktop-data 并不是一个“用于登录的发行版”,而只是一个 数据容器

它只需要一个 合法的 Linux rootfs,用于初始化文件系统结构即可。


五、WSL --import 的真实工作逻辑

wsl --import 做了三件事:

  1. 创建一个新的 WSL 发行版
  2. 将指定的 rootfs 解包到目标目录
  3. 生成一个 ext4.vhdx 虚拟磁盘文件

命令结构是:

wsl --import <发行版名> <目标目录> <rootfs.tar(.xz)> --version 2

只要满足以下条件,就可以成功:

  • rootfs 是合法 Linux 文件系统
  • 目标目录存在
  • 文件路径完全匹配

六、一个真实错误案例:文件名导致的失败

在实际操作中,曾出现如下目录结构:

F:\Docker>dir

2026/01/13  08:43   116,065,444  ubuntu-rootfs.tar..xz

注意文件名:

ubuntu-rootfs.tar..xz
                ↑↑

这是 两个点

但执行的命令是:

wsl --import docker-desktop-data F:\Docker\data F:\Docker\ubuntu-rootfs.tar.xz --version 2

结果必然是:

系统找不到指定的文件
错误代码: Wsl/ERROR_FILE_NOT_FOUND

这类错误:

  • 与 WSL 配置无关
  • 与 Docker 无关
  • 完全是路径与文件名不匹配导致

七、修正后的正确导入方式(可复现)

在以下前提下:

  • F:\Docker\data 已存在
  • rootfs 文件名为 ubuntu-rootfs.tar..xz

正确命令应为:

wsl --import docker-desktop-data F:\Docker\data F:\Docker\ubuntu-rootfs.tar..xz --version 2

成功时的表现特征

  • 命令 无任何输出
  • 直接返回命令提示符
  • 无报错信息

八、如何验证 docker-desktop-data 是否真正创建成功

8.1 查看 WSL 发行版列表

wsl -l -v

正确结果应包含:

docker-desktop
docker-desktop-data

8.2 检查物理存储位置

dir F:\Docker\data

你应当看到:

ext4.vhdx

这个文件即为:

  • Docker 镜像
  • Docker 容器
  • Docker Volume

唯一物理存储载体


九、启动 Docker Desktop 后会发生什么

当 Docker Desktop 启动时:

  1. 自动检测 docker-desktop-data
  2. 挂载其 ext4 文件系统
  3. /var/lib/docker 指向该数据盘

之后执行:

docker pull nginx

你会发现:

  • F 盘空间减少
  • C 盘无明显变化

这说明数据路径已经被永久锁定


十、常见疑问 FAQ

Q1:为什么我看到 .wslconfig 的转义字符警告?

该警告与当前导入流程无直接关系,不会影响:

  • WSL 发行版创建
  • Docker Desktop 正常运行

可在 Docker 完整跑通后再处理。


Q2:能否之后再迁移 docker-desktop-data?

可以,但需要:

  • wsl --export
  • wsl --unregister
  • wsl --import

相比之下,在 首次写入前完成规划,成本最低。


Q3:为什么 Docker Desktop 不提供图形化的数据盘选择?

因为 Docker Desktop 并不直接管理:

  • ext4 文件系统
  • 虚拟磁盘位置

这些都属于 WSL2 的职责范围。


十一、经验总结:为什么这个方法是“长期解法”

从工程角度看,该方案具备以下特点:

  • 不依赖第三方工具
  • 不修改 Docker 内部配置
  • 不使用非官方 hack
  • 完全符合 WSL 原生机制

一旦完成:

  • Docker 升级不影响
  • Windows 更新不影响
  • Docker 镜像增长不影响 C 盘

十二、结语

Docker Desktop 在 Windows 上并不“黑箱”,只是其关键行为被隐藏在 WSL2 的抽象层之下。一旦理解:

  • docker-desktop-data 的创建时机
  • ext4.vhdx 的真实作用
  • wsl --import 的底层逻辑

就可以在 系统生命周期的最早阶段,为 Docker 做出一次正确、长期有效的存储决策。

这不是技巧,而是架构层面的理解与实践。