systemctl reload docker可热重载registry-mirrors、insecure-registries、labels、debug、live-restore等配置,容器不中断;storage-driver、data-root、bridge网络参数等须systemctl restart docker生效。
修改 /etc/docker/daemon.json 后不重启 docker 服务就能让配置生效,关键在于“重载”(reload)而非“重启”(restart)。但能否热重载,取决于你改的是哪一类配置项。
哪些配置支持热重载(无需 restart)
以下配置项在执行 systemctl reload docker 或向 dockerd 进程发送 SIGHUP 信号后可立即生效,容器不会中断:
- registry-mirrors:镜像加速地址
- insecure-registries:不安全私有仓库地址
- labels:守护进程标签(用于节点筛选)
- debug:调试模式开关(true/false)
- live-restore:启用后,即使 dockerd 暂时挂掉,容器仍继续运行
- max-concurrent-downloads / uploads
- authorization-plugin、features 等部分高级选项
哪些配置必须重启服务才生效
以下配置项不支持热重载,修改后必须执行 systemctl restart docker,会导致正在运行的容器短暂中断(除非已启用 live-restore):
- storage-driver(如 overlay2 → vfs)
- data-root(Docker 数据根目录)
-
bridge 相关网络配置(如
bip、default-gateway) - log-driver 和 log-opts(仅对新创建容器生效,旧容器需重建)
- 任何拼写错误、JSON 格式非法或与启动参数冲突的字段(如同时在命令行和 daemon.json 中指定
graph)
正确操作步骤(以支持热重载的配置为例)
确认你修改的是支持热重载的项后,按顺序执行:
- 用
vim或nano编辑/etc/docker/daemon.json,确保 JSON 语法严格合法(无尾随逗号、无不可见字符) - 检查文件权限:
ls -l /etc/docker/daemon.json,应为-rw-r--r-- root root - 执行重载命令:
sudo systemctl reload docker - 验证是否生效:
docker info | grep -A 5 "Registry Mirrors\|Insecure Registries"
常见失效原因排查
即使执行了 reload,配置仍不生效,大概率是以下问题之一:
- JSON 文件存在隐藏字符(尤其用 Windows 编辑器或 Vim 复制粘贴造成),建议用
printf重写或用jq . /etc/docker/daemon.json验证格式 - 配置项名写错(如
insecure-registery少个s),Docker 会静默忽略该字段 - 系统使用了 systemd 覆盖配置(如
/etc/systemd/system/docker.service.d/override.conf中指定了--insecure-registry参数),会覆盖 daemon.json - Windows/macOS Docker Desktop 用户注意:桌面版不读取
/etc/docker/daemon.json,而是分别读取C:\Users\XXX\.docker\windows-daemon.json或~/.docker/daemon.json


















