Docker Mirror · 使用说明

一个能让 docker pull 真的快起来的自建镜像加速站。

image-20260418195030885


为什么又一个镜像站?

其实免费的 Docker 镜像站不少,比如 status.anye.xyz 里就记录了一长串,其中不乏基于 Cloudflare 的站点。但能用好用之间,差了一条不小的河。

你大概率遇到过这样的场景:

  • 某个镜像站能拉、但拉到一半速度掉到几十 KB/s,挂着等一晚上不如重来
  • 切回官方仓库又超时,于是又换下一个镜像站,循环往复
  • 有些 CI/CD 场景本来就赶时间,重试一轮整条流水线就跪了
  • 部分项目搞 GitHub Action 把镜像同步到阿里云等国内仓库,流程繁琐还有延迟,官方更新后同步得等
  • 更有甚者,一些镜像站是付费

能拉取这件事本身已经被解决得差不多了,剩下的真正痛点是——拉得够不够快

image-20260418195248646


本站的差异化

这个镜像站和大多数免费站的区别在于:把”快”这件事单独当作一等目标来做

具体怎么做到?三件事:

  1. Nginx 分层缓存策略
    按 URL 特征区别对待——内容寻址的 blob 和 manifest 缓存 30 天,latest 标签绝不缓存,具名 tag 缓存 1 小时。热门镜像基本命中缓存,冷启动才回源。

  2. Cloudflare 全球 CDN 兜底
    即使 Nginx 没缓存,CF 边缘节点也会在你附近复用,进一步减少跨洋流量。

  3. 客户端本地优选 IP
    这是让下载速度产生质变的一步,也是大多数人没做的一步。详见下一节。


高速下载的关键:本地测速 + hosts 绑定

这是整份说明的重点。会不会做这一步,决定了下载体验是”能用”还是”起飞”。

为什么默认连接会慢

Cloudflare 采用 Anycast 路由,理论上会把你自动分配到最近的边缘节点。但”最近”是按网络拓扑算的,不一定是对你速度最快的:

  • 运营商到 CF 某个 POP 的路由可能绕路
  • 被分配到的节点可能带宽被打满
  • 节点和节点之间的下载速度能差十倍不止

同一个镜像站,换个 IP 访问可能从 200 KB/s 变成 20 MB/s——这不是夸张。

为什么必须本地做,不能服务端预先优选

这是个常被忽略的点:

  • 对我快 ≠ 对你快。你所在网络到 CF 节点的路由质量,只有你自己能测。
  • 对命中缓存的请求无效。CF 边缘命中时根本不回源,服务端做的任何优选都绕不过去。
  • 持续扫描属于滥用 CF。后端不断测全量 IP 段会触发风控,有违 CF 服务条款。

所以任何有良心的镜像站都不会帮你”全球优选”——这活儿必须你本机做。

具体怎么做(三步)

1. 用 XIU2/CloudflareSpeedTest

开源项目,支持 Windows / Linux / macOS:

1
2
3
4
5
6
7
8
# Linux
mkdir -p cfst && cd cfst
wget -N https://github.com/XIU2/CloudflareSpeedTest/releases/download/v2.3.4/cfst_linux_amd64.tar.gz
tar -zxf cfst_linux_amd64.tar.gz
chmod +x cfst

# 跑一次测速:延迟上限 200ms,输出前 20 个
./cfst -tl 200 -dn 20

Windows 推荐 scoop install dorado/cloudflare-speedtest,macOS 换 darwin_arm64 包。

2. 看”下载速度”那一列,不是看延迟

测速结果类似:

1
2
3
4
IP 地址           丢包率  平均延迟   下载速度(MB/s)  地区
104.27.200.69 0.00 146.23 28.64 LAX
172.67.60.78 0.00 139.82 15.02 SEA
...

延迟只是初筛,决定体验的是下载速度那一列。挑 MB/s 最高的那个 IP。

image-20260418194635385

3. 写入 hosts

1
2
3
4
5
6
# Linux / macOS
sudo sh -c 'echo "104.27.200.69 hub.bravexist.cn" >> /etc/hosts'

# Windows(管理员身份编辑)
# C:\Windows\System32\drivers\etc\hosts 追加:
# 104.27.200.69 hub.bravexist.cn

然后刷新 DNS 缓存,再 docker pull 就会走你选中的节点了。

隔 1–2 周重测一次即可。节点状态会随时间漂移,但也不需要天天测,太勤反而没必要。


一劳永逸 vs. GitHub Action 同步

常见的另一种”加速方案”是用 GitHub Action 把镜像同步到阿里云 / 腾讯云等国内仓库。这种方案的问题:

GitHub Action 同步 本镜像站 + 本地测速
接入成本 每个镜像都要配 workflow 改一次 daemon.json
更新延迟 看同步频率,通常几小时 实时(原站有新版就能拉)
镜像范围 只有同步过的才能拉 Docker Hub 任意镜像
维护 Action 可能挂、配额可能用完 无需维护
慢了怎么办 只能换个镜像再同步 重测换 IP

对大多数场景,一个稳定的镜像站 + 本地测速才是一劳永逸的方案。镜像加不加新的不用管、Action 失不失败不用管,真的慢了就重测一次 IP,半分钟的事。


配置步骤

https://hub.bravexist.cn

接入超简单,三步:

1. 编辑 Docker 配置

1
2
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json

2. 写入镜像源

1
2
3
{
"registry-mirrors": ["https://hub.bravexist.cn"]
}

3. 重启 Docker

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

完成后执行 docker info,输出底部能看到 Registry Mirrors 里列出本站域名就是生效了。


补充说明

  • 本站不限速不限注册完全免费,且永远不打算收费。
  • latest 标签不缓存,所以 docker pull xxx:latest 永远拉的是真实最新版。
  • 带具体 tag 的镜像(比如 nginx:1.25)可能有最多 1 小时的缓存延迟,符合 Docker Hub 自身的惯例。
  • 服务端不记录单个用户的拉取历史,只做聚合的匿名使用统计。

遇到问题

拉取卡住 / 超时?
先本地测速、绑定 hosts。90% 的”卡住”是网络问题而不是服务问题。

想贡献配额?
本站接受用户贡献 Docker Hub 的登录凭证(推荐用只读 PAT),贡献后会自动加入共享 token 池,1 小时后自动清除。详见站内 /submit 页面。

想自己部署一套?
完整的架构、Nginx 配置、CF Worker 代码都是开放的,自建门槛不高。核心思路就是本说明里讲的三件事:分层缓存、CDN 兜底、引导用户本地优选。


一句话总结:能拉的镜像站一抓一大把,能让你拉得飞快的没几个。本站做的事,就是把”拉得飞快”的方法论讲清楚、把基础设施准备好。

效果

高速下载

image-20260418194827574