Docker Desktop 启动闪退并报“invalid character 'ï'”错误,几乎100%是settings.json含UTF-8 BOM;可用PowerShell命令Get-Content "$env:APPDATA\Docker\settings.json" -Encoding Byte -TotalCount 3 | ForEach-Object { $_.ToString("X2") }验证,输出EF BB BF即含BOM,正常应为7B({)或为空。

配置文件损坏最直接的表现就是 Docker Desktop 启动时闪退,并报错 deserializing settings file: parsing JSON: invalid character 'ï' looking for beginning of value —— 这几乎 100% 是 settings.json 被保存成了 UTF-8 BOM 编码。
怎么快速确认 settings.json 是否含 BOM
不需要打开编辑器肉眼判断,BOM 是不可见字节。用 PowerShell 一行命令就能验证:
Get-Content "$env:APPDATADockersettings.json" -Encoding Byte -TotalCount 3 | ForEach-Object { $_.ToString("X2") }
如果输出是 EF BB BF,说明开头有 BOM;正常应为空或直接显示 JSON 第一个字符(如 7B 对应 {)。
- 这个检查必须在 Docker Desktop 已关闭状态下进行,否则文件可能被锁
- 不要用
Get-Content ... | ConvertFrom-Json测试,BOM 会导致解析直接失败,掩盖真正问题 - 如果命令报“找不到路径”,说明配置文件可能被删了或路径不对——Docker Desktop 4.55.0 默认仍用
$env:APPDATADockersettings.json
为什么 Windows 记事本一保存就出事
Windows 记事本把“UTF-8”等同于“UTF-8 with BOM”,这是它几十年的老毛病。而 Docker 引擎底层用的是 Go 的 encoding/json 包,该包严格遵循 RFC 7159,拒绝任何非空白开头的字节流。
- VS Code、Notepad++、Sublime 等默认保存为 UTF-8 无 BOM,但如果你手动选过“UTF-8(带签名)”,结果一样
- PowerShell 的
Out-File或重定向>在未指定-Encoding utf8NoBom时,默认也写 BOM(PowerShell 7.2+ 才支持该参数) - 复制粘贴镜像地址时,从网页或微信里带入的全角引号、零宽空格(
U+200B)也会让 JSON 解析失败,但错误信息会变成invalid character ' '(注意那个空格是全角)
修复后还要检查哪些地方容易二次损坏
一次修复不等于一劳永逸。Docker Desktop 在某些操作中会自动重写 settings.json,如果环境或插件有干扰,可能再次写入 BOM 或非法字符。
- 启用 WSL 集成后首次点击“Apply & Restart”,Docker Desktop 会重写配置,此时若系统区域设置为中文且 PowerShell 默认编码异常,可能触发写入 BOM
- 通过 GUI 修改镜像加速器、资源限制等设置后重启,也可能复现问题——建议修改前先备份:
Copy-Item "$env:APPDATADockersettings.json" "$env:APPDATADockersettings.json.backup" - Docker Desktop 4.55.0 开始,设置页面底部多了个 “Reset to factory defaults” 按钮,它不会清空
settings.json,而是覆盖为新生成的无 BOM 文件,可作为兜底手段
真正麻烦的不是第一次修,而是你改完配置、点完重启、看到图标又灰了,才想起上次修好的文件又被谁悄悄改回了 BOM —— 所以每次手动编辑前,先用上面那行 Get-Content ... -Encoding Byte 确认原始状态,比事后排查快得多。


















