解决docker拉取镜像出现网络超时问题,以及修改docker源之后重启docker报错

108 阅读2分钟
# Docker 国内镜像加速器配置全记录

> 适用于 Docker CE ≥ 20.10,Ubuntu / CentOS / Debian 通用,复制即可一次性通过。

---

## 1. 创建配置目录
```bash
sudo mkdir -p /etc/docker

2. 写入加速器(JSON 必须严格符合格式)

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://dislabaiot.xyz",
    "https://hub.rat.dev",
    "https://doublezonline.cloud",
    "https://xdark.top",
    "https://dockerproxy.com"
  ]
}
EOF

注意

  • 最后一个 URL 后面不能留逗号,否则 Docker 启动报 invalid character
  • 整个文件不要出现注释//#),也不留多余空格;否则 systemd 会提示 daemon.json: unexpected end of JSON input 并直接导致服务失败。

3. 重载并重启

sudo systemctl daemon-reload
sudo systemctl restart docker

4. 验证是否生效

docker info | grep -A2 Mirrors

正常应出现:

Registry Mirrors:
 https://docker.1ms.run/
 https://docker.xuanyuan.me/
 ...

若列表为空,说明 JSON 语法仍错误,请回退到第 2 步重新检查。


5. 国内可用高速镜像源清单

序号镜像地址备注
1docker.1ms.run延迟低,带宽足
2docker.xuanyuan.me个人维护,更新及时
3dislabaiot.xyz教育网线路友好
4hub.rat.dev云flare 加速
5doublezonline.cloud华南移动线路优化
6xdark.top备用,偶尔抽风
7dockerproxy.com老牌代理,可用性高

建议一次写 3-5 个即可,Docker 会按顺序自动 failover;过多反而增加解析时间。


6. 易错点与排查技巧

  1. 空白符陷阱
    复制网页代码时容易把行尾空格或 &nbsp; 带进去,导致 docker.service 启动失败。
    解决方法:

    cat -A /etc/docker/daemon.json
    

    若看到 ^I(Tab)或 $ 后有高亮空格,重新 nano 手工删除。

  2. 注释导致 JSON 非法
    daemon.json 是纯 JSON,不支持 //# 注释。想留备注请使用外部文档,文件本身必须保持标准 JSON。

  3. systemd 不 reload
    修改完 daemon.json 后忘记 daemon-reload,Docker 依旧读取旧配置。
    养成习惯:

    sudo systemctl daemon-reload && sudo systemctl restart docker
    
  4. 代理与镜像镜同时启用
    若之前配过 HTTP_PROXY,再写 registry-mirrors 不会冲突;但代理地址写错也会导致 context deadline exceeded,看上去像是镜像源失效。排查时先 unset HTTPS_PROXYcurl -I https://docker.1ms.run/v2/ 确认镜像站可达。

  5. 立即验证拉取速度

    time docker pull hello-world
    

    第一次耗时 < 5 秒基本说明加速生效;若仍 > 30 秒,考虑换另一个镜像地址或切代理。


7. 小结

配置国内镜像加速器只需“写文件→重启→验证”三步,但 90% 的启动失败都源于 JSON 格式不合法URL 带空格
严格按照上文复制,保留逗号、不留注释、及时 daemon-reload,即可保证 Docker 守护进程正常启动并享受高速拉取体验。祝你早日摆脱 context deadline exceeded