daemon.json是docker守护进程的全局json配置文件,必须严格遵循语法规范(双引号、无注释、无多余逗号),路径为/etc/docker/daemon.json;配置后需执行sudo systemctl daemon-reload和sudo systemctl restart docker生效,错误时可通过jq验证及journalctl查日志定位。

它不是脚本或配置模板,而是一个纯 JSON 对象,只允许标准双引号、合法布尔值(true/false)、数字、字符串、数组和嵌套对象。写错一个字符,systemctl restart docker 就会报错退出。
配置位置与基础结构
文件默认路径是 /etc/docker/daemon.json(Linux),首次使用需手动创建目录和文件:
sudo mkdir -p /etc/dockersudo nano /etc/docker/daemon.json- 内容必须是完整、闭合的 JSON 对象,不能是数组或裸值
最简有效配置示例(仅启用调试):
{"debug": true}
常见错误写法(会导致启动失败):
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
-
{debug: true}(键名没加双引号) -
{"debug": true,}(末尾多余逗号) -
{"debug": true // 开启调试}(含注释) -
{"registry-mirrors": ['https://...']}(用单引号)
关键字段的正确写法
多个常用配置项可组合在同一对象中,注意嵌套层级和类型:
-
镜像加速源:必须是字符串数组,每个地址以
https://开头"registry-mirrors": ["https://d8b3zdiw.mirror.aliyuncs.com", "https://docker.m.daocloud.io"] -
日志限制:
log-opts是对象,max-size和max-file值为字符串(带单位)"log-driver": "json-file", "log-opts": {"max-size": "20m", "max-file": "5"} -
代理设置:
proxies下的default是对象,httpproxy和httpsproxy值必须是完整 URL(含协议)"proxies": {"default": {"httpproxy": "http://192.168.1.100:8080", "noproxy": "localhost,127.0.0.1"}} -
DNS 配置:必须是字符串数组,不可写成单个字符串
"dns": ["114.114.114.114", "8.8.8.8"]
验证与生效流程
编辑完成后,务必分步验证:
- 用
jq '.' /etc/docker/daemon.json检查语法(无输出即合格) - 执行
sudo systemctl daemon-reload(重载 systemd 配置) - 再执行
sudo systemctl restart docker - 若失败,立即查日志:
sudo journalctl -u docker.service --since "1 minute ago"
错误通常显示类似 failed to start daemon: failed to parse /etc/docker/daemon.json: invalid character,直接定位到出错行号。
安全与维护建议
避免踩坑的关键习惯:
- 修改前先备份:
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak - 不要改动
/lib/systemd/system/docker.service,所有定制应通过daemon.json实现 - 空配置文件(如只写
{})是合法的,Docker 会回退到默认值 - 字段名大小写敏感,
registry-mirrors写成Registry-Mirrors无效










