Docker Desktop 因 settings.json 的 BOM 或 JSON 语法错误无法启动;记事本默认保存为 UTF-8 with BOM,导致解析失败报 invalid character 'ï';可用 PowerShell 命令清除 BOM 并验证 JSON 合法性。

改完 settings.json 后 Docker Desktop 打不开,八成是文件编码或 JSON 语法出了问题——Windows 记事本一保存就加 BOM,Docker 引擎直接报 invalid character 'ï' looking for beginning of value,连解析都失败,根本不会读到你写的镜像地址。
为什么记事本改配置必崩
Windows 记事本默认把“UTF-8”等同于“UTF-8 with BOM”,开头硬塞三个字节 EF BB BF,而 Docker 的 JSON 解析器只认纯 UTF-8(无 BOM)。这个 ï 就是 BOM 被当普通字符读出来的表现,不是你手误多打了什么符号。
- 所有用记事本、Notepad++ 默认设置、VS Code 未关“Save with BOM”选项编辑过的
settings.json,都有风险 - 复制粘贴时从网页或文档带入的不可见空格、全角冒号、中文引号也会触发类似错误
- 错误发生在启动早期,连日志都来不及写,所以你看不到详细报错,只有闪退或卡在启动界面
PowerShell 一行命令修复编码(推荐)
别开编辑器,直接用 PowerShell 清掉 BOM。这招快、准、不依赖第三方工具,且能保留你所有手动配置。
- 以管理员身份运行 PowerShell
- 执行以下三行(复制粘贴即可):
Stop-Process -Name "Docker Desktop" -ErrorAction SilentlyContinue Stop-Process -Name "com.docker.backend" -ErrorAction SilentlyContinue Start-Sleep -Seconds 2 $settingsPath = "$env:APPDATA\Docker\settings.json" Copy-Item $settingsPath "$settingsPath.backup_$(Get-Date -Format 'yyyyMMdd_HHmmss')" $content = Get-Content $settingsPath -Raw [IO.File]::WriteAllText($settingsPath, $content, (New-Object System.Text.UTF8Encoding $false))
- 完成后手动启动 Docker Desktop,95% 的情况立刻恢复
检查 JSON 语法是否合法
就算编码对了,手写 JSON 极易漏逗号、多逗号、引号不闭合。Docker 不会提示第几行错,只报“parsing JSON failed”。
- 把
settings.json拖进 VS Code 或浏览器打开,它会自动标红语法错误位置 - 重点关注:镜像加速器字段是否套在
"registry-mirrors"数组里;"experimental"值是不是布尔型(true/false,不能加引号);最后一项后面有没有多余逗号 - 临时删掉你新增的整段配置,保存后测试能否启动——能,则问题一定出在那几行里
重置配置但保留镜像和容器
如果实在不确定哪改错了,又不想重装,用 Docker Desktop 自带的“重置”功能最稳妥——它会清空 settings.json 和 UI 配置,但默认不删你拉下来的镜像、创建的容器和卷。
- 右键任务栏 Docker 图标 → Troubleshoot → Reset to factory defaults
- 勾选 Keep my images and containers,点 Reset
- 重置后重新配置镜像加速器,这次务必用 VS Code 或 Notepad++ 并选“UTF-8 without BOM”保存
真正麻烦的不是改错配置,而是改完没验证就关编辑器——下次编辑前,先在终端跑一遍 Get-Content "$env:APPDATA\Docker\settings.json" -Raw | ConvertFrom-Json,只要没报错,说明语法和编码都过关。这一步花不了十秒,但能避开 80% 的重启失败。











