视频加载失败

Docker Desktop 卡在 Starting the Docker Engine 与后台 500:E_ACCESSDENIED 完整排查笔记

1130 字
6 分钟
Docker Desktop 卡在 Starting the Docker Engine 与后台 500:E_ACCESSDENIED 完整排查笔记

一、故障现象#

  • Docker Desktop 打开后永远停在 Starting the Docker Engine… 转圈
  • Troubleshoot / 后台 info 接口返回 500 Internal Server Error
  • docker version 只返回 Client 段,Server 段报 500 ... check if the server supports the requested API version
  • 当天刚开机就失败,重启 Docker、重启 WSL 均无效
  • 最初怀疑是代理导致

二、环境信息#

项目值
系统Windows 11 23H2(22631)
Docker Desktop4.88.1 / Engine 29.7.2
WSL2.6.3.0 / kernel 6.6.87.2-1
数据盘docker_data.vhdx(2.43 GB)
特殊配置C:\Users\<用户>\AppData\Local\Docker\wsl 被缓存搬移工具 junction 到 F:\someCache\Users\<用户>\AppData\Local\Docker\wsl
代理系统代理关闭;存在 Mihomo TUN 虚拟网卡(非本次原因)

三、关键日志#

后端日志位置:%LOCALAPPDATA%\Docker\log\host\com.docker.backend.exe.log

[com.docker.backend.exe.wslexec][E] c:\windows\system32\wsl.exe --mount --bare --vhd
<home>\appdata\local\docker\wsl\disk\docker_data.vhdx failed: exit status 0xffffffff
(stdout: "无法将磁盘“\\?\F:\someCache\Users\1\AppData\Local\Docker\wsl\disk\docker_data.vhdx”
附加到 WSL2: 拒绝访问。
错误代码: Wsl/Service/AttachDisk/MountDisk/HCS/E_ACCESSDENIED")
[com.docker.backend.exe.engines][W] attempting recovery from engine failure:
starting engine: engine linux/wsl failed to start: starting WSL engine:
bootstrapping main distribution ...

之后 Docker 每 1.5 秒重试一次 --mount,无限循环;引擎状态永远停在 starting,Dashboard 因此一直转圈,后台 HTTP API 对未就绪引擎返回 500。

四、排查过程(证据链)#

  1. 排除代理:实测系统代理关闭(ProxyEnable=0)、WinHTTP 直连。代理/TUN 只可能影响镜像拉取与 DNS,不可能让引擎卡在启动阶段;且报错发生在 WSL 服务层(Wsl/Service/AttachDisk),与网络无关。

  2. WSL 本体正常:wsl -l -v 正常列出 Ubuntu-24.04 与 docker-desktop;docker-desktop 发行版本身能启动(状态 Running)。说明坏的不是 WSL,而是数据盘挂载这一步。

  3. 500 是结果不是原因:引擎未 running → 后端 API 500。修好引擎,500 自然消失。

  4. 同目录对比两个 vhdx 的属主(决定性线索):

    • 能挂载的发行版盘 wsl\main\ext4.vhdx → 属主 当前用户
    • 挂不上的数据盘 wsl\disk\docker_data.vhdx → 属主 BUILTIN\Administrators

    ACL 表面看一切正常(SYSTEM/Administrators 完全控制、Authenticated Users Modify),但 WSL 2 的 --mount(AttachDisk)会对发起调用的用户做授权校验;普通用户令牌不满足校验 → E_ACCESSDENIED。Docker Desktop 后端正是以普通用户身份执行 wsl.exe --mount。

  5. 社区同款案例佐证:Docker 论坛、微软 Q&A、microsoft/WSL#14544 均有相同错误码;论坛解法“用管理员手动 wsl --mount 就能挂上”正说明是调用者授权问题。

  6. 修复验证:改属主后,同一行 wsl.exe --mount 命令不再报错,引擎 5.4 秒进入 running(此前无限重试)。

五、根因#

docker_data.vhdx 被缓存搬移工具以管理员身份移动后,属主变成了 Administrators。WSL 2 的 --mount --bare --vhd 路径会校验调用用户对该 vhdx 文件的权限,普通用户因不满足校验被拒,返回 Wsl/Service/AttachDisk/MountDisk/HCS/E_ACCESSDENIED,引擎永远无法启动。

两个易误导的表象:

  • 报错路径显示 \\?\F:\someCache\...(junction 解析后的真实路径),但 junction 本身不是元凶——同目录下发行版盘挂载正常;
  • 文件 ACL 里 SYSTEM/Administrators 都有完全控制,看似“权限没问题”——但 WSL 校验的是调用者,不是 SYSTEM。

六、修复步骤(管理员 PowerShell)#

Terminal window
# 1) 夺取属主
takeown /f "$env:LOCALAPPDATA\Docker\wsl\disk\docker_data.vhdx"
# 2) 给当前用户完全控制(这一步是决定性修复)
icacls "$env:LOCALAPPDATA\Docker\wsl\disk\docker_data.vhdx" /grant "$env:USERNAME:(F)" /Q
# 3) 顺手恢复 Docker 提权助手服务(负责 Hyper-V 后端等其他提权操作)
Start-Service com.docker.service
# 4) 重启 Docker Desktop,验证
docker version # 应出现 Server 段
docker ps # 容器列表

数据零丢失:本案例中 redis(sub2api-redis)与 postgres(sub2api-postgres)两个容器及全部镜像完好,修好后自动恢复运行。

七、顺带发现的两个坑#

  1. wsl --update 永远卡在“正在检查更新”:Windows Update 服务(wuauserv)被停用,更新检查无限挂起。需要先 Start-Service wuauserv 再更新。WSL 2.6.3 本身可用,非必要不用更新。
  2. 代理与 Docker 的关系(回答最初怀疑):
    • 系统代理 / HTTP 代理不会导致引擎无法启动;
    • 但 Clash / Mihomo 等 TUN 全局模式会劫持 vEthernet (WSL) 虚拟网卡,导致引擎内 DNS 解析失败、拉镜像超时——那是另一类故障;
    • 正确姿势:Docker Desktop → Settings → Resources → Proxies 里配置 http://127.0.0.1:<端口>。

八、预防建议#

  • 用搬移工具把 AppData 缓存挪到其他盘后,检查关键文件属主:

    Terminal window
    Get-Acl "$env:LOCALAPPDATA\Docker\wsl\disk\docker_data.vhdx" | Select-Object Owner, AccessToString
  • WSL 相关 vhdx 应保持:属主为当前用户、未压缩(compact /Q <file> 检查,压缩属性同样会触发 HCS E_ACCESSDENIED)、不被云同步/备份软件接管;

  • 遇到 E_ACCESSDENIED 先查属主与 ACL,不要急着重装 Docker / WSL 或删数据盘(删了镜像容器全没)。

九、参考#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Docker Desktop 卡在 Starting the Docker Engine 与后台 500:E_ACCESSDENIED 完整排查笔记
https://ryuki.icu/posts/docker-wsl-eaccessdenied-troubleshooting/
作者
RK
发布于
2026-08-30
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
RK
Long may the sunshine
公告
Long may the sunshine
分类
标签
最新动态
站点天气
天气加载中…
站点统计
文章
27
分类
6
标签
59
总字数
39,139
篝火已燃
0 天
最后活动
0 天前
每日一签