需同时配置registry-mirrors加速公共镜像、insecure-registries放行私有仓库:{"registry-mirrors":["https://xxxxx.mirror.aliyuncs.com","https://docker.m.daocloud.io"],"insecure-registries":["harbor.example.com"]},修改后须执行sudo systemctl daemon-reload和sudo systemctl restart docker生效。

配置 /etc/docker/daemon.json 加速私有镜像拉取,关键在于区分两类需求:一是从国内公共源(如阿里云、DaoCloud)加速拉取 Docker Hub 镜像;二是安全访问你自己的私有仓库(如 Harbor、本地 registry)。两者需同时配置,但逻辑不同、字段不同,不能混用。
明确 registry-mirrors 和 insecure-registries 的分工
registry-mirrors 只对 默认远程仓库(即 Docker Hub)的请求生效,它把 docker pull nginx 这类无域名前缀的命令,自动代理到你指定的加速地址。它不作用于私有仓库,比如 docker pull harbor.your-company.com/myapp:1.0 不会走这个镜像源。
insecure-registries 是专为私有仓库设计的白名单。当你用 HTTP 或自签名 HTTPS 访问私有库时,Docker 默认拒绝连接。把它加进这个列表,Docker 才允许直连——但它不提供加速功能,只是“放行”。
所以,要既快又通,得两个字段都配,且各自填对内容。
写一个能同时工作的 daemon.json 示例
假设你用的是 Harbor 私有库(地址 harbor.example.com),同时想用阿里云和 DaoCloud 加速公共镜像。配置如下:
{
"registry-mirrors": [
"https://xxxxx.mirror.aliyuncs.com",
"https://docker.m.daocloud.io"
],
"insecure-registries": [
"harbor.example.com"
],
"debug": false,
"experimental": false
}
注意:
• 阿里云地址需登录控制台获取专属链接,不能直接填通用域名;
• harbor.example.com 不能带 http:// 或 https://,只写域名或 IP;
• 如果 Harbor 启用了有效 TLS 证书(非自签),就不用加进 insecure-registries,反而应移除,更安全。
验证是否真正生效
改完文件后必须执行两步:
• sudo systemctl daemon-reload
• sudo systemctl restart docker
然后分项验证:
• 查加速源是否加载:docker info | grep "Registry Mirrors" -A 1,应看到你填的两个地址;
• 查私有库是否被放行:docker info | grep "Insecure Registries" -A 1,应显示 harbor.example.com;
• 实测拉取:
- docker pull ubuntu:22.04 → 看日志是否出现阿里云或 DaoCloud 域名,确认走加速;
- docker pull harbor.example.com/test/app:dev → 不报 unauthorized 或 certificate signed by unknown authority 即成功。
常见失败原因与绕过方法
如果拉私有镜像仍失败,优先排查:
• DNS 解析失败:在 daemon.json 中加 "dns": ["8.8.8.8", "1.1.1.1"],再重载重启;
• Harbor 服务未监听 5000 端口或启用了 HTTPS 但证书无效:用 curl -k https://harbor.example.com/v2/ 测试返回;
• 企业网络拦截了非标准端口:把 Harbor 改成 443 端口并配合法证书,避免加 insecure-registries;
• 配置被覆盖:检查是否存在 /etc/systemd/system/docker.service.d/ 下的 override 文件,或旧版系统里的 /etc/sysconfig/docker,它们可能覆盖 daemon.json。


















