两种症状要分开看
daemon.json 改坏后有两种表现:服务起不来,多数是 JSON 语法错误;配置不生效,常见是该字段需要重启而只做了热加载,或配置路径根本不对。先做语法校验,再决定是热加载还是安排重启窗口。
基本信息
| 语法校验 | python3 -m json.tool /etc/docker/daemon.json |
|---|---|
| 生效方式 | 部分字段支持热加载,其余需要重启 |
| 配置路径 | 以服务启动参数里指向的文件为准 |
| 常见语法错误 | 多余逗号、注释、中文引号 |
| 影响范围 | 部分字段只对新建容器生效 |
典型使用场景
- 改完配置后服务起不来,先做语法校验定位
- 配置改了但行为没变,确认该字段是否需要重启
- 核对实际加载的配置文件路径,避免改错文件
- 变更窗口前预演:先在测试机验证再动生产
- 排查字段作用范围,区分只影响新容器还是全部
校验与生效
校验与生效
sudo python3 -m json.tool /etc/docker/daemon.json > /dev/null && echo json-ok
sudo systemctl reload docker || true # 仅对支持热加载的字段有效
docker info -f '{{.Driver}} live={{.LiveRestoreEnabled}}' # 核对生效结果
sudo systemctl restart docker # 确认需要重启后再执行症状与处置
| 症状 | 常见原因 | 处置 |
|---|---|---|
| 服务起不来 | JSON 语法错误 | 先过语法校验再重启 |
| 配置不生效 | 字段需重启,只做了热加载 | 安排窗口重启 |
| 改了没反应 | 配置文件路径不对 | 核对服务启动参数 |
| 只有新容器变了 | 字段只影响新建容器 | 存量容器需重建 |
reload 只对官方列出的可热加载字段有效,拿不准就直接安排窗口重启,别指望热加载。
JSON 末尾多逗号、注释、中文引号都是常见语法错误,先过一遍语法校验再重启,避免服务直接起不来。
改了配置但容器行为没变时,先确认该配置项是否只作用于新建容器,存量容器需要重建才能生效。
配置文件路径以服务启动参数为准,改错文件会表现为完全没有效果,动手前先确认实际加载的是哪一个。
变更前保留一份可用的旧配置,重启失败时可以快速回滚,缩短故障时间。