焦点

dockerpull国内镜像

时间:2010-12-5 17:23:32  作者:知识   来源:时尚  查看:  评论:0
内容摘要:上周帮同事配新开发机,docker pull nginx 卡了四十分钟,最后报了个 net/http: TLS handshake timeout。这不是网络故障,是 Docker Hub 的 CDN

上周帮同事配新开发机,国内docker pull nginx 卡了四十分钟,镜像最后报了个 net/http: TLS handshake timeout。国内这不是镜像网络故障,是国内 Docker Hub 的 CDN 在境内基本处于半瘫状态。默认走的镜像是 registry-1.docker.io,解析出来的国内 IP 经常被 QoS 限速,运气不好直接连不上。镜像所以国内镜像加速器不是国内可选项,是镜像必选项。

先说清楚一个容易混淆的国内点:镜像加速器和镜像仓库是两回事。加速器本质是镜像个反向代理,帮你把 Docker Hub 的国内请求转发到国内节点,拉到的镜像镜像内容和官方一致,只是国内路径短了。镜像仓库比如阿里云 ACR、腾讯云 TCR,那是你自己存私有镜像的地方,跟拉取公共镜像的加速是不同场景。很多人把这两个概念搅在一起,配置的时候找错入口。

配置方式:改 daemon.json 最省事

Linux 下编辑 /etc/docker/daemon.json,没有就新建:

{  "registry-mirrors": [ "https://docker.1ms.run", "https://docker.xuanyuan.me", "https://hub.rat.dev" ] }

然后 systemctl daemon-reload && systemctl restart docker。注意 registry-mirrors 是个数组,Docker 会按顺序尝试,第一个挂了自动切下一个。我一般配三个,留点冗余。

Windows 和 macOS 用 Docker Desktop 的话,Settings → Docker Engine 里直接改 JSON,效果一样。

验证是否生效:docker info 看输出里有没有 Registry Mirrors 段落,列出的地址对得上就行。

几个还能用的加速地址(2025 年实测)

这两年大批加速器关停,中科大、网易、百度这些老牌的基本都停了。目前手上实测能跑通的:

  • https://docker.1ms.run — 毫秒镜像,速度稳,偶尔高峰期慢
  • https://docker.xuanyuan.me — 轩辕镜像,免费版够用
  • https://hub.rat.dev — 老鼠镜像,小众但响应快

这些地址的可用性波动很大,可能今天好用下周就挂。建议收藏一个聚合页,比如 status.1ms.run 这类监控站点,挂了随时换。

如果加速器全挂了怎么办

两个备选方案。一是用代理:给 Docker daemon 配 HTTP_PROXY,走你自己的科学上网通道。编辑 /etc/systemd/system/docker.service.d/http-proxy.conf,写入环境变量,reload 后重启。这个方式最可靠,但要求你有稳定的代理。

二是换镜像源。很多开源项目在 GitHub Container Registry(ghcr.io)或 Quay 上有同步镜像,比如拉 ghcr.io/nginx/nginx 而不是 nginx。缺点是不是所有镜像都有对应版本,得碰运气。

还有个野路子:用 skopeo 先把镜像 copy 到本地目录,再 docker load。适合一次性拉大镜像的场景,但操作繁琐,日常开发不推荐。

一个容易踩的坑

配了加速器之后,docker pull 有时候还是慢。原因是 Docker 对 manifest 的请求和 blob 层的下载可能走不同路径,加速器只代理了部分请求。这种情况换个加速地址通常能解决,不是配置写错了。

另外,加速器只对 Docker Hub 生效。你 pull gcr.io/xxx 或者 ghcr.io/xxx 的时候,registry-mirrors 不起作用,得单独配代理或者找对应的国内同步源。这个区别很多人配完加速器发现某些镜像还是拉不动,就是卡在这儿。

最后提醒一句:公共加速器本质是别人搭的代理,别用来拉敏感或私有镜像。私有镜像老老实实走自己的 registry,或者自建 Harbor。省那点时间不值得拿安全换。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap