daemon.json配置不生效的主因是被其他配置覆盖或引擎不兼容:containerd不读该文件、旧版docker(

直接改 /etc/docker/daemon.json 是最稳妥的方式,但不是所有场景都适用——比如 containerd 环境、旧版 Docker、或某些云厂商限制下会失效。
为什么 daemon.json 配置不生效?
常见原因不是写错了地址,而是被其他配置覆盖或引擎不兼容:
-
containerd完全不读daemon.json里的registry-mirrors,必须单独配/etc/containerd/config.toml - Docker 版本低于 18.06(如 CentOS 7 默认的 1.13)不支持
registry-mirrors字段,需改docker.service启动参数 - 某些云主机(如华为云 SWR 加速器)明确说明“暂不支持 containerd”,但用户误装了 containerd 却还在改 daemon.json
- 系统里存在多处 registry 配置:比如
/etc/sysconfig/docker(旧版 RHEL/CentOS)、/etc/default/docker(Ubuntu 14.04)、systemd override文件,任一有冲突都会让 daemon.json 失效
Linux 下三种生效路径怎么选?
按优先级和兼容性排序,别盲目套模板:
- 新版 Docker(≥18.06)+ 标准 systemd:只改
/etc/docker/daemon.json,内容必须是合法 JSON,末尾不能有多余逗号,字段名大小写敏感(是registry-mirrors,不是registry_mirror) - 旧版 Docker(如 1.13)或 systemd 不识别 daemon.json:用
systemctl edit docker新增 override,写[Service]\nExecStart=\nExecStart=/usr/bin/dockerd --registry-mirror=https://mirror.ccs.tencentyun.com - containerd 环境:停掉 docker,编辑
/etc/containerd/config.toml,在[plugins."io.containerd.grpc.v1.cri".registry.mirrors]下加镜像源,然后sudo systemctl restart containerd
加速地址填错会导致拉取失败吗?
会,但错误表现很隐蔽:
- 地址格式错误(比如少
https://、域名拼错、用了已停服的https://registry.docker-cn.com)→docker info显示空的Registry Mirrors或报解析失败,但docker pull仍走默认 Hub,只是变慢 - 地址可访问但无缓存(如部分小众加速器未同步
nginx:alpine)→ 拉取时返回manifest unknown,实际是加速器没这个 tag,不是网络问题 - 腾讯云内网加速地址
https://mirror.ccs.tencentyun.com在外网无法解析 → 必须确认当前机器是否在腾讯云 VPC 内,否则 DNS 就查不到 - 阿里云加速器 ID 过期(账号欠费或 RAM 用户权限变更)→ 返回 403,日志里能看到
error getting credentials - err: exec: "docker-credential-xxx": executable file not found类似提示
真正卡点不在“怎么填”,而在“谁在读这个配置”——Docker、containerd、podman 各自维护一套机制,混用时务必先 ps aux | grep dockerd 或 crictl info 确认底层运行时。生产环境别依赖单一加速器,建议用多个地址兜底,但注意顺序:Docker 只试第一个,失败就退回到官方源,不会自动轮询。











