Win11 Docker 安装到 E 盘及报错处理实录
Win11 Docker 安装到 E 盘及报错处理实录
在 Windows 11 系统上尝试将 Docker Desktop 安装到非 C 盘(以 E 盘为例),期间遇到的各种报错和最终的解决方法
1. 目标与初始安装方法
目标: 将 Docker Desktop 程序安装到 E:\Docker
,更重要的是,将其 WSL 2 的数据(包含镜像、容器等,是主要的磁盘空间消耗者)存放到 E:\Docker\data
,从而释放 C 盘空间。
初始方法: 根据网上靠谱的教程,需要使用管理员权限的命令行来执行带有自定义参数的 Docker Desktop 安装程序。
CMD (管理员):
:: 确保以管理员身份运行 CMD
:: 切换到安装包所在目录
cd /d E:\downloadsE
:: 运行安装命令
start /w "" "Docker Desktop Installer.exe" install -accept-license --installation-dir="E:\Docker" --wsl-default-data-root="E:\Docker\data" --windows-containers-default-data-root="E:\Docker"
--installation-dir
: 指定 Docker Desktop 程序安装目录。--wsl-default-data-root
: 核心参数,指定 WSL 2 数据存储根目录。--windows-containers-default-data-root
: 指定 Windows 容器数据存储根目录(如果使用)。
2. 安装成功但 Docker 无法启动
使用上述方法执行安装后,安装程序顺利完成。但是,启动 Docker Desktop 时,它卡在启动界面或者直接报错,提示无法配置 WSL 2 distributions。这表明虽然程序文件安装到了 E 盘,但其依赖的 WSL 环境未能成功部署到指定位置。
3. 检查 Windows 功能Hyper-V
根据 Docker Desktop 的要求,首先需要检查 Windows 的相关功能是否启用。
- 检查路径: 控制面板 -> 程序 -> 程序和功能 -> 启用或关闭 Windows 功能。
- 需要确保勾选:
- 适用于 Linux 的 Windows 子系统 (Windows Subsystem for Linux)
- 虚拟机平台 (Virtual Machine Platform)
- Hyper-V
在我的情况下,发现 Hyper-V 找不到!。
启用 Hyper-V 的方法:
使用以下 .cmd
脚本(需要以管理员身份运行):
@echo off
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
echo Hyper-V feature enablement initiated. Please restart your computer.
pause
- 注意: 这个脚本可能会运行一段时间。有时即使脚本看起来还在运行,去控制面板查看可能已经可以勾选 Hyper-V 了。勾选后需要重启电脑。启用过程有时需要尝试两次才能成功。
4. 确保 WSL 和虚拟机平台开启
即使启用了 Hyper-V,为了保险起见,建议使用管理员权限的 PowerShell 再次确认 WSL 和虚拟机平台功能已启用:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
等待命令执行完成。完成后最好再次重启电脑。
5. 更新 WSL 内核
确保所有功能开启后,尝试更新 WSL 内核,以获取最新的兼容性和修复。
# 在 PowerShell (管理员) 中运行
wsl --update
在我的情况下,执行此命令时遇到了 HTTP 403 Forbidden
错误,无法下载更新。经过排查,发现是开启了 VPN 代理导致的。关闭 VPN 后,wsl --update
成功执行并更新了内核。
6. E 盘目录访问被拒绝 (Access Denied)
Docker Desktop 启动时依然报错,日志显示如下关键信息:
deploying WSL2 distributions
ensuring main distro is deployed: deploying "docker-desktop": preparing directory "E:\\Docker\\data\\main" for WSL distro "docker-desktop": creating distro destination dir "E:\\Docker\\data\\main": mkdir E:\Docker\data: Access is denied.
checking if isocache exists: CreateFile \\wsl$\docker-desktop-data\isocache\: The filename, directory name, or volume label syntax is incorrect.
- 核心错误:
mkdir E:\Docker\data: Access is denied.
- 即使是以管理员身份运行安装程序和 Docker Desktop,它在尝试创建 WSL 数据存放目录E:\Docker\data
时仍然被拒绝访问。这很奇怪,因为E:\Docker
目录并非受特殊保护的目录。 - 连锁错误: 由于无法创建数据目录,
docker-desktop
和docker-desktop-data
这两个 WSL 发行版未能成功部署。因此,后续尝试通过\\wsl$\docker-desktop-data
路径访问时,会报“文件名、目录名或卷标语法不正确”的错误,因为这个 WSL 路径此刻是无效的。
7. 手动创建目录并授权
既然是权限问题,那就手动解决。
- 完全退出 Docker Desktop。
- 打开 PowerShell (以管理员身份运行)。
- 手动创建目标目录:
如果# 确保 E:\Docker 目录已存在 mkdir E:\Docker\data
E:\Docker
也不存在,先mkdir E:\Docker
。 - 为当前用户授予对该目录的完全控制权限(递归):
# ${env:USERNAME} 会自动替换为你的当前 Windows 用户名 icacls E:\Docker /grant "${env:USERNAME}:(OI)(CI)F" /T
icacls
: Windows 内置的用于修改文件/目录访问控制列表 (ACL) 的命令。E:\Docker
: 目标目录。/grant "${env:USERNAME}:(OI)(CI)F"
: 授予指定用户 (${env:USERNAME}
) 完全控制 (F
) 权限。(OI)
表示对象继承(文件继承),(CI)
表示容器继承(子目录继承)。/T
: 表示递归应用到所有子文件和子目录。
执行完 icacls
命令后,再次启动 Docker Desktop。
8. 验证成功
这一次,Docker Desktop 终于顺利启动了!
为了确认 WSL 发行版确实部署到了 E 盘并正在运行,可以在 PowerShell 中运行:
wsl --list --verbose
# 或者 wsl -l -v
输出结果中应该能看到 docker-desktop
和 docker-desktop-data
两个发行版,状态为 Running
,版本为 2
。同时观察 E 盘的 E:\Docker\data
目录下,会发现生成了相应的 .vhdx
虚拟磁盘文件,证明数据确实存放在了指定位置。