Windows Docker环境搭建:从WSL虚拟化到Docker Desktop配置全指南
2026/8/23 9:40:55 网站建设 项目流程

1. 先搞清楚 WSL 和 Docker Desktop 的关系,别急着装

如果你在 Windows 上想用 Docker,大概率会搜到 WSL(Windows Subsystem for Linux)。很多人第一步就卡住了,因为没理清它们之间的关系。简单说,WSL 不是 Docker,它是一个让你在 Windows 里原生运行 Linux 环境的子系统。而 Docker Desktop for Windows 是一个桌面应用,它可以选择使用 WSL 2 作为后端引擎来运行容器。

为什么要先搞懂这个?因为你的安装路径和后续问题的排查方向,完全取决于这个选择。如果你直接在 Windows 的命令提示符或 PowerShell 里运行docker命令,是不会有任何结果的。Docker 的核心是 Linux 内核的特性,所以它需要一个 Linux 环境。传统方式是装一个虚拟机(如 VMware),但 WSL 2 提供了更轻量、集成度更高的方案。

所以,整个流程的逻辑链条是:启用 Windows 的虚拟化功能 -> 安装 WSL -> 将 WSL 2 设置为默认版本 -> 安装一个 Linux 发行版(如 Ubuntu)-> 最后安装 Docker Desktop 并配置其使用 WSL 2 后端

很多人遇到的virtualization support not detectedDocker Desktop failed to start这类错误,八成问题出在最开始的虚拟化或 WSL 环节,而不是 Docker Desktop 本身。下面我就按这个从底层到应用的顺序,把安装、基本操作、系统迁移和清理卸载一次性讲透。

2. 安装准备:虚拟化、WSL 与 Linux 发行版

安装不是无脑点下一步,尤其是对于开发环境,前置条件没满足,后面会有一堆莫名奇妙的错误。我建议你按这个顺序检查并操作。

2.1 确认并启用虚拟化

这是所有步骤的基石。WSL 2 和 Docker 都需要 CPU 的硬件虚拟化支持(Intel VT-x 或 AMD-V)。

如何检查是否已启用?

  1. 打开任务管理器(Ctrl+Shift+Esc)。
  2. 切换到“性能”标签页。
  3. 看“CPU”部分,如果“虚拟化”显示为“已启用”,那这一步就过了。如果显示“已禁用”,就需要进 BIOS/UEFI 开启。

如何在 BIOS/UEFI 中开启?这个因电脑品牌(Dell, HP, Lenovo, ASUS 等)而异,没有统一路径。通用方法是:

  1. 重启电脑,在开机自检画面时,快速连续按指定键进入 BIOS/UEFI 设置界面(通常是 F2、F10、F12、Del 或 Esc)。
  2. 在设置界面中,找到类似Virtualization TechnologyIntel VT-xAMD-VSVM Mode的选项。
  3. 将其状态从Disabled改为Enabled
  4. 保存并退出(通常是 F10),电脑会自动重启。

注意:有些电脑(特别是某些品牌笔记本)可能在 BIOS 里还藏着一个“虚拟机监控程序”或“Hyper-V”相关的开关,如果后续步骤仍报虚拟化错误,可以一并检查开启。

2.2 安装 WSL 并升级到 WSL 2

Windows 10 2004 及以上版本和 Windows 11 都内置了 WSL 安装命令。这是目前最推荐的方式。

一键安装(推荐): 以管理员身份打开 PowerShell 或 Windows 终端,输入以下命令:

wsl --install

这个命令会默认执行以下几件事:

  1. 启用“适用于 Linux 的 Windows 子系统”可选功能。
  2. 启用“虚拟机平台”可选功能。
  3. 下载并安装最新的 Linux 内核更新包。
  4. 将 WSL 2 设置为默认版本。
  5. 下载并安装默认的 Linux 发行版(通常是 Ubuntu)。

执行后需要重启电脑。重启后,会自动弹出窗口开始设置 Ubuntu,让你创建用户名和密码。

手动分步安装(用于排查或定制): 如果wsl --install执行太慢或出错,可以手动分步进行,这样能看清哪一步出了问题。

# 1. 启用 WSL 功能 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 2. 启用虚拟机平台功能 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart # 3. 重启电脑 # 重启后,继续以下步骤 # 4. 下载并安装 WSL 2 Linux 内核更新包 # 需要去微软官网下载安装包,安装后继续。 # 5. 设置 WSL 2 为默认版本 wsl --set-default-version 2

验证 WSL 安装: 安装并设置好 Linux 发行版后,在 PowerShell 中运行:

wsl --list --verbose # 或简写为 wsl -l -v

你会看到类似下面的输出,确认发行版名称和它运行的 WSL 版本(应该是 2)。

NAME STATE VERSION * Ubuntu Running 2

2.3 安装 Docker Desktop 并连接 WSL 2

  1. 下载:去 Docker 官网下载 Docker Desktop for Windows 的安装包。
  2. 安装:运行安装包,安装过程中,确保勾选以下两个选项:
    • Install required Windows components for WSL 2:为 WSL 2 安装必需的 Windows 组件。
    • Add shortcut to desktop:按需选择。
  3. 配置:安装完成后,启动 Docker Desktop。第一次启动可能较慢。进入设置(Settings):
    • General:确认Start Docker Desktop when you log in等选项按需勾选。
    • Resources->WSL Integration:这是关键!你会看到已安装的 WSL 发行版列表(如 Ubuntu)。将你想要集成 Docker 的发行版右侧的开关打开。这步操作意味着 Docker 命令和守护进程将在这个 WSL 发行版中运行。
  4. 验证:打开之前安装的 Ubuntu 终端(可以在开始菜单里找,或 PowerShell 里输入wsl进入),输入:
    docker --version docker run hello-world
    如果能看到 Docker 版本信息,并且hello-world容器能成功运行并输出欢迎信息,那么恭喜你,整个环境就打通了。

3. WSL 的基本操作与 Docker 日常使用

环境搭好之后,日常开发就在 WSL 的 Linux 终端里进行。这里列出最常用的一些操作。

3.1 WSL 常用命令

这些命令在 Windows 的 PowerShell 或 CMD 中执行,用于管理 WSL 本身。

  • wsl -l -v:列出所有已安装的发行版及其状态和 WSL 版本。
  • wsl:默认进入默认的 WSL 发行版。
  • wsl -d <发行版名称>:进入指定的 WSL 发行版。
  • wsl --shutdown:立即终止所有正在运行的 WSL 发行版和虚拟机。这在 Docker Desktop 卡住或资源占用异常时很有用,相当于强制重启 WSL 后端。
  • wsl --terminate <发行版名称>:终止指定的发行版。
  • wsl --export <发行版名称> <导出文件路径.tar>:导出发行版,用于备份或迁移。
  • wsl --import <新发行版名称> <安装位置> <导入文件路径.tar>:导入发行版。
  • wsl --set-version <发行版名称> <版本号>:切换指定发行版的 WSL 版本(1 或 2)。
  • wsl --set-default-version <版本号>:设置新安装发行版的默认版本。

3.2 在 WSL 中使用 Docker

一旦 Docker Desktop 的 WSL 集成开启,你在 WSL 终端里的体验就和在原生 Linux 上几乎一样。

  • 文件系统互访
    • 在 WSL 中,你可以通过/mnt/c//mnt/d/等路径直接访问 Windows 的 C 盘、D 盘。
    • 在 Windows 中,可以通过\\wsl$\<发行版名称>的网络路径访问 WSL 的文件系统。例如在文件资源管理器地址栏输入\\wsl$\Ubuntu即可。
  • 运行容器:所有docker rundocker builddocker-compose up等命令都在 WSL 终端内执行。
  • 持久化数据:对于数据库等需要持久化的数据,强烈建议使用 Docker 卷(volume)或绑定挂载(bind mount)到 WSL 内部的文件路径,而不是/mnt/c/下的 Windows 路径,因为跨文件系统性能损耗很大。
    # 推荐:使用 Docker 卷 docker run -v my_volume:/var/lib/mysql mysql # 或绑定挂载到 WSL 家目录 docker run -v ~/my_project/data:/app/data my_image # 不推荐:直接挂载 Windows 盘符(性能差,权限问题多) # docker run -v /mnt/c/Users/xxx/data:/app/data my_image

4. 导出、导入与迁移:备份你的开发环境

这是 WSL 非常实用的功能,可以把配置好的整个 Linux 环境(包括安装的软件、Docker 镜像、项目文件)打包带走,或者复制一份干净的出来。

4.1 导出 WSL 发行版

假设你的发行版叫Ubuntu,你想把它备份到 D 盘。

  1. 首先,在 PowerShell 中关闭该发行版:wsl --terminate Ubuntu
  2. 执行导出命令:
    wsl --export Ubuntu D:\wsl_backup\ubuntu_backup.tar
    这个过程会将整个发行版文件系统打包成一个tar文件。文件大小可能有好几个 GB,时间也会比较长。

4.2 导入 WSL 发行版

你可以把导出的tar文件导入为一个新的发行版。这常用于环境克隆或迁移到新电脑。

# 在 PowerShell 中执行 wsl --import Ubuntu_New D:\wsl_instances\ubuntu_new D:\wsl_backup\ubuntu_backup.tar
  • Ubuntu_New:新发行版的名称,不能和已有的重复。
  • D:\wsl_instances\ubuntu_new:新发行版的虚拟硬盘文件将要存放的Windows 路径目录。这个目录需要提前创建好。
  • 最后是备份文件的路径。

导入完成后,使用wsl -d Ubuntu_New即可进入。注意,导入的发行版默认用户是root,如果你需要之前配置的普通用户,需要修改 WSL 配置。

4.3 迁移 WSL 发行版到其他驱动器

如果你的 C 盘空间告急,可以将 WSL 发行版迁移到 D 盘等空间更大的驱动器。

  1. 导出发行版(如上所述)。
  2. 注销(卸载)原有的发行版:wsl --unregister Ubuntu
  3. 将导出的tar文件导入到新的目标驱动器路径(如上所述)。

注意:wsl --import导入时指定的安装位置是虚拟磁盘文件(ext4.vhdx)的存放目录,这个文件会随着你使用而增长。确保目标驱动器有足够空间。

5. 删除与卸载:如何干净地移除

当你需要彻底清理时,顺序很重要,乱删可能会在系统里留下残骸。

5.1 卸载 Docker Desktop

这是最直接的一步。通过 Windows 的“应用和功能”设置,找到Docker Desktop,点击卸载。卸载程序通常会处理得比较干净。卸载后,建议重启一次电脑。

5.2 注销(卸载)WSL 发行版

如果你不想再用某个 Linux 发行版了,可以注销它。这会删除该发行版内的所有数据,包括你的个人文件、安装的软件和 Docker 存储在其中的镜像、容器,操作前请确保已备份。

wsl --unregister Ubuntu

Ubuntu替换为你的发行版名称。执行后,该发行版将从列表中消失,其占用的磁盘空间会被释放。

5.3 完全关闭并移除 WSL 功能

如果你确定不再需要任何 WSL 环境,可以将其作为 Windows 功能关闭。

  1. 在 PowerShell 中关闭所有 WSL:wsl --shutdown
  2. 打开“控制面板” -> “程序” -> “启用或关闭 Windows 功能”。
  3. 取消勾选以下两项:
    • “适用于 Linux 的 Windows 子系统”
    • “虚拟机平台”
  4. 点击确定,根据提示重启电脑。

重启后,WSL 功能就被移除了。你可以手动删除之前存放 WSL 虚拟磁盘文件的目录(例如%LOCALAPPDATA%\Packages\CanonicalGroupLimited*或你自己指定的导入目录)来彻底清理空间。

6. 常见问题与排查思路

按照上面的流程走,大部分问题都能避免。但如果遇到问题,可以按这个顺序排查。

问题:Docker Desktop failed to start because virtualisation support wasn’t detected.

  • 排查:这是最经典的错误。100% 是虚拟化问题。
    1. 回到2.1节,确认 BIOS/UEFI 中虚拟化已开启。
    2. 确保没有其他虚拟化软件(如某些老版本 Android 模拟器、旧版 VirtualBox)冲突,暂时关闭它们。
    3. 在“启用或关闭 Windows 功能”中,确认“Hyper-V”和“Windows 虚拟机监控程序平台”已勾选(Docker Desktop 安装器通常会帮你勾选)。

问题:WSL: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost...

  • 排查:这是网络代理问题。如果你在 Windows 上设置了系统代理(如某些网络工具),WSL 2 默认不会自动继承。
    • 方案一(推荐):在 WSL 的 Linux 终端内,手动设置HTTP_PROXYHTTPS_PROXY环境变量,指向 Windows 主机的 IP(通常是host.docker.internal127.0.0.1)和端口。
    • 方案二:在 Docker Desktop 设置中,找到Resources->Network,可以尝试修改 DNS 或关闭Experimental Features中的某些网络特性。

问题:WSL --install 太慢或安装卡住

  • 排查:这通常是网络问题,因为需要从微软服务器下载 Linux 内核和发行版。
    • 换源:对于wsl --install安装的默认 Ubuntu,安装完成后,在 Ubuntu 终端内执行sudo sed -i ‘s@//archive.ubuntu.com@//mirrors.aliyun.com@g’ /etc/apt/sources.list更换阿里云镜像源,然后sudo apt update
    • 手动下载:直接去微软商店搜索 “Ubuntu” 等发行版并安装,有时比命令行更快。安装后,仍需确保 WSL 版本是 2。

问题:Docker 命令在 WSL 中报错 “Cannot connect to the Docker daemon”

  • 排查
    1. 首先确认 Docker Desktop 是否正在运行(Windows 任务栏右下角应有 Docker 图标)。
    2. 确认在 Docker Desktop 设置的Resources->WSL Integration中,对应的 WSL 发行版开关已打开。
    3. 在 PowerShell 中执行wsl --shutdown,然后重新启动 Docker Desktop 和 WSL 终端。

问题:文件操作在/mnt/c/下异常慢

  • 排查:这是预期行为。WSL 2 访问 Windows 文件系统(/mnt/)是通过网络桥接,性能有损失。
    • 最佳实践:将项目代码放在 WSL 内部的文件系统里(如~/project)。可以用git clone直接克隆到 WSL 内部。如果需要用 Windows 编辑器(如 VSCode),可以安装 “Remote - WSL” 扩展,它会自动处理文件路径,让你在 Windows 下编辑 WSL 里的文件,体验无缝。

我个人更建议,在 Windows 上用 Docker,就彻底拥抱 WSL 2 这个 Linux 环境。把开发、构建、测试的上下文都放在 WSL 内部,只把 Docker Desktop 当作一个管理和服务后台。这样能避开绝大多数因文件系统和路径差异导致的诡异问题。当环境配置好后,定期用wsl --export做个备份,会是成本最低的“后悔药”。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询