Win11/Win10 安装 Docker Desktop 完整避坑指南:WSL2、权限、数据卷迁移

Windows 装 Docker Desktop 看起来简单,但 WSL2 的坑、权限的问题、数据卷迁移的麻烦,每一个都够折腾一阵子。


先确认你的版本

Win + R 输入 winver 看版本。Win11 基本都行。Win10 需要 2004 以上(Build 19041)。

家庭版也能装 Docker Desktop,以前不行,现在 WSL2 后端全家桶都支持了。


装 WSL2

管理员 PowerShell:

POWERSHELL
wsl --install
wsl --update

这条命令会开启 WSL 和虚拟机平台功能,然后安装 Ubuntu 默认发行版。重启电脑。

重启后设一下用户名密码,然后确认是 WSL2 而不是 WSL1:

POWERSHELL
wsl -l -v
# 应该看到 VERSION 列是 2

如果是 1,转成 2:wsl --set-version Ubuntu 2

设 WSL2 为默认:wsl --set-default-version 2


装 Docker Desktop

去 Docker 官网下载安装包,双击安装。装完重启。

首次启动会让你同意条款、选设置。默认就行。注意 Settings → Resources → WSL Integration 里确保你的 WSL 发行版开关是开的。


WSL2 资源限制(重点)

WSL2 默认能吃掉你所有内存。8G 的机器它最多能吃到 8G,直接卡死。

在用户目录下创建 %USERPROFILE%.wslconfig

INI
[wsl2]
memory=4GB
processors=4
swap=2GB
localhostForwarding=true

设完重启 WSL:wsl --shutdown,再打开就行。

4 给 WSL2,留 4G 给 Windows 自己用。


镜像加速

Docker 默认拉取 Docker Hub,国内慢。Settings → Docker Engine → 加 registry-mirrors:

JSON
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
  ]
}

Apply & restart。


数据卷迁移

WSL2 的数据存在虚拟磁盘里:%LOCALAPPDATA%Dockerwsldataext4.vhdx。随着用镜像越来越多,这个文件会越来越大。

迁移到其他盘:

POWERSHELL
# 停止 Docker 和 WSL
wsl --shutdown

# 导出
wsl --export docker-desktop-data "D:docker-data.tar"

# 注销原来的
wsl --unregister docker-desktop-data

# 导入到新位置
wsl --import docker-desktop-data "D:DockerData" "D:docker-data.tar" --version 2

压缩变大的 vhdx 文件:

POWERSHELL
wsl --shutdown
Optimize-VHD -Path "$env:LOCALAPPDATADockerwsldataext4.vhdx" -Mode Full

这个命令需要 Hyper-V 模块(Win10/11 专业版自带,家庭版没有)。


常见问题

“Docker Desktop requires the Server core with containers feature” — WSL2 没装好,wsl --install 然后重启。

“WSL 2 installation is incomplete” — 去 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi 下载更新。

WSL 里访问不了 Windows 文件 — 确认 localhostForwarding=true。WSL 里访问 Windows 文件用 /mnt/c/

Docker Desktop 启动后一直 “Docker Desktop is starting” — 资源不够。加大 .wslconfig 的 memory 限制,或者关掉其他吃内存的程序。


卸载(干净卸载)

光在控制面板卸载是不够的:

POWERSHELL
# 卸载 Docker Desktop
wsl --shutdown
wsl --unregister docker-desktop
wsl --unregister docker-desktop-data

# 删残留
Remove-Item "$env:APPDATADocker" -Recurse -Force
Remove-Item "$env:LOCALAPPDATADocker" -Recurse -Force

发表评论