快速修复
# 1. 停掉所有 Docker 进程(退出 Docker Desktop)
Get-Process | Where-Object { $_.ProcessName -like '*Docker*' } | Stop-Process -Force
# 2. 不能删文件,只能重命名父目录(两个都要)
Move-Item "$env:LOCALAPPDATA\Docker\run" "$env:LOCALAPPDATA\Docker\run.old-<日期>"
Move-Item "$env:LOCALAPPDATA\docker-secrets-engine" "$env:LOCALAPPDATA\docker-secrets-engine.old-<日期>"
# 3. 确认关闭 DockerAI(settings-store.json 里 EnableDockerAI=false,否则 Inference 又杀启动)
# 4. 直接启动 Docker Desktop 并轮询就绪
Start-Process 'C:\Program Files\Docker\Docker\Docker Desktop.exe'
docker version --format '{{.Server.Version}}' # 循环等它出现
你会遇到什么
Docker Desktop 引擎起不来,GUI 弹「An unexpected error occurred」;com.docker.backend.exe.log 里是:
starting services: initializing Ingest server: listening on unix://C:/Users/<user>/AppData/Local/Docker/run/sailor-ingest.sock: remove ...: The file cannot be accessed by the system
更烦的是「修好一个下一个又报」:sailor-ingest.sock → docker-secrets-engine/engine.sock → dockerInference,每次重启换一个 socket。常见诱因:Docker Desktop 非正常退出(强制结束进程、崩溃、断电),或 docker desktop start CLI 挂起后中断。
本文路径:快速修复(30 秒一段命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。
为什么会这样
Docker Desktop 非正常退出后,%LOCALAPPDATA%\Docker\run\ 与 %LOCALAPPDATA%\docker-secrets-engine\ 留下孤儿 AF_UNIX socket 文件,。
这些文件带 ReparsePoint 属性,Windows 拒绝删除(error 1920: The file cannot be accessed by the system)。
引擎启动时要 remove 这些旧 socket,删不掉就整体启动失败。
| 尝试 | 结果 |
|---|---|
[System.IO.File]::Delete / Remove-Item -Force | error 1920 |
fsutil reparsepoint / robocopy | 失败 |
WSL rm -rf | 静默失败(文件仍在) |
| 重命名父目录 | 可行(官方 workaround) |
若%APPDATA%\Docker\settings-store.json的EnableDockerAI: true,第二次启动还会重建dockerInference并再次杀启动——先关掉。
Docker Desktop 的 Windows 侧引擎用 AF_UNIX socket 文件与 WSL 侧通信,正常退出时引擎负责清理;非正常退出(断电/强杀)时清理逻辑没跑,socket 文件残留。
Windows 对带 ReparsePoint 属性的文件有特殊保护(删除返回 error 1920),这是文件系统层的行为而不是 Docker 的 bug,所以普通删除 API、Remove-Item、WSL rm 全被拒。
确定性推论:删不掉不是权限不够,是「重解析点」属性问题;官方 workaround「重命名父目录」绕开的是删除限制而不是文件本身;先确认 settings-store.json 里 EnableDockerAI 为 false,否则第二次启动会重建 dockerInference 再次杀启动。
一步步来
1. 先看日志确认是这个坑 — 必做
%LOCALAPPDATA%\Docker\log\host\com.docker.backend.exe.log 搜 The file cannot be accessed by the system / GET /error。命中 → 不用再试各种删除方式,直接走重命名。
2. 停 Docker 并重命名目录 — 必做
所有 Docker 进程退出后,把两个目录改名(改名可行,删除永远失败)。改名后启动时 Docker 会自动重建干净的 run / docker-secrets-engine。
3. 关 EnableDockerAI — 必做
%APPDATA%\Docker\settings-store.json:"EnableDockerAI": false。不关的话启动时 Inference manager 会再杀一次启动。
4. 启动并验证 — 必做
Start-Process 'C:\Program Files\Docker\Docker\Docker Desktop.exe'
docker version --format '{{.Server.Version}}'
docker ps
5. 清理 — 必做
确认引擎正常后,旧目录可删:wsl -d Ubuntu bash -lc "rm -rf /mnt/c/Users/<user>/AppData/Local/Docker/run.old-* /mnt/c/Users/<user>/AppData/Local/docker-secrets-engine.old-*"(改名后顽固 reparse 文件也能被清掉)。
怎么确认修好了
docker version 返回 server 版本、docker ps 正常列出容器;重启后再没出现 The file cannot be accessed by the system。
其它环境的表现
| 环境 | 说明 |
|---|---|
docker desktop start CLI | 实测挂起并留下新孤儿 socket,别用它;直接 Start-Process Docker Desktop.exe |
| 连续失败 | 修好一个 socket 后下一个又报是常态(sailor → secrets-engine → dockerInference),一次把两个目录都改名 |
| EnableDockerAI=true | 启动时重建 dockerInference 再杀启动,先置 false |
| 未实测 | 非 Windows 平台(Docker Engine on Linux)无此问题,该坑仅限 Docker Desktop |
症状
Docker Desktop 引擎启动失败,日志报 listening on unix://...sailor-ingest.sock: remove ...: The file cannot be accessed by the system;GUI 弹 unexpected error;修好一个 socket 后下一个又报。
原因
非正常退出留下的孤儿 AF_UNIX socket 带 ReparsePoint 属性,Windows 拒绝删除(error 1920);引擎启动时无法 remove 旧 socket → 整体失败。
解法
- 日志确认
The file cannot be accessed by the system; - 停所有 Docker 进程;
- 重命名(不要删除)
%LOCALAPPDATA%\Docker\run与%LOCALAPPDATA%\docker-secrets-engine两个父目录; settings-store.json置EnableDockerAI=false;- 直接启动 Docker Desktop.exe,轮询
docker version就绪; - 确认正常后清理旧目录。
验证证据
- 本机实测(2026-08-30,Windows 11 + Docker Desktop 4.88.1):日志实锤
sailor-ingest.sock ... The file cannot be accessed by the system;删除方式全灭(error 1920 / WSL 静默失败);改名父目录 + EnableDockerAI=false + 重启后 server=29.7.2,kind 集群全部恢复,WSL 侧 docker 可连;当日第二次复发(docker desktop start 挂起)同样流程修复成功。证据:实测复现日志(2026-08-30)。 - 未实测:非 Windows 平台行为未实测(该问题官方 issue 仅报告于 Docker Desktop)。
相关 canonical
按「前置 → 同根 / 同域 / 相关」读:
- 相关(报错相近,根因不同):
- Docker daemon 连不上(包含:orphan socket 是「连不上 daemon」的 Desktop 场景根因)
适用工具 (1)
本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。
docker · 外部工具成套方案 (组合包)
这个问题包含在下列成套安装方案中。
- 容器与 WSL 环境成套配置与排查 partial
来源与证据
← 编码代理与终端 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡