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-desktopdocker-desktop-data 这两个 WSL 发行版未能成功部署。因此,后续尝试通过 \\wsl$\docker-desktop-data 路径访问时,会报“文件名、目录名或卷标语法不正确”的错误,因为这个 WSL 路径此刻是无效的。

7. 手动创建目录并授权

既然是权限问题,那就手动解决。

  1. 完全退出 Docker Desktop
  2. 打开 PowerShell (以管理员身份运行)
  3. 手动创建目标目录:
    # 确保 E:\Docker 目录已存在
    mkdir E:\Docker\data
    
    如果 E:\Docker 也不存在,先 mkdir E:\Docker
  4. 为当前用户授予对该目录的完全控制权限(递归):
    # ${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-desktopdocker-desktop-data 两个发行版,状态为 Running,版本为 2。同时观察 E 盘的 E:\Docker\data 目录下,会发现生成了相应的 .vhdx 虚拟磁盘文件,证明数据确实存放在了指定位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值