Docer Registry HTTP v2 API 需要使用 Bearer Token 才能访问,大大增加了访问难度,像 chsrc 这样的静态链接测速工具难以对 DockerHub 测速。
不测速就不知道各个镜像的质量,实际上很多网络上的镜像站点都是通过 Cloudflare Worker 搭建的。 我想要知道真实的下载速度,所以有了这个脚本。
- 大部分逻辑来自 enihsyou/docker-mirror-hammal 和 Claude 3.5 Sonnet + Gemini 2.5 Pro
- Bash 版本兼容于 Linux/macOS,Powershell 版本兼容于 Windows + Powershell 7
- 镜像列表来自互联网,感谢发布者
- 本代码以 MIT 协议发布
用以下命令一键执行:
bash <(curl -sL "https://gist.githubusercontent.com/enihsyou/dafa9fca2e0db2623ecf7db500842b87/raw/docker-mirror-speedtest.sh")
用以下命令一键执行:
irm "https://gist.githubusercontent.com/enihsyou/dafa9fca2e0db2623ecf7db500842b87/raw/docker-mirror-speedtest.ps1" | iex
./docker-mirror-speedtest.sh hub2.nat.tf hub1.nat.tf --verbose
.\docker-mirror-speedtest.ps1 hub2.nat.tf -Verbose
$ .\scripts\speed-test.ps1
🚀 开始 Docker 镜像站测速...
❌ [docker.1panel.live] 测速异常: 无法获取认证信息 (403 Forbidden)
❌ [docker.1panel.top] 测速异常: 无法获取认证信息 (429 Too Many Requests)
🔑 [docker.m.daocloud.io] 需要认证,正在获取token...
📍 [docker.m.daocloud.io] 获取下载地址...
🏃 [docker.m.daocloud.io] 正在测速...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 513 100 513 0 0 6772 0 --:--:-- --:--:-- --:--:-- 6932
100 20.0M 100 20.0M 0 0 21.6M 0 --:--:-- --:--:-- --:--:-- 40.4M
📊 [docker.m.daocloud.io] 测速结果: DNS解析时间: 0.016131s 连接时间: 0.030032s 总时间: 0.925078s 下载速度: 22670002B/s
❌ [docker.ketches.cn] 测速异常: 无法获取认证信息 (429 Too Many Requests)
🔑 [docker.1ms.run] 需要认证,正在获取token...
📍 [docker.1ms.run] 获取下载地址...
🏃 [docker.1ms.run] 正在测速...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 20.0M 100 20.0M 0 0 11.1M 0 0:00:01 0:00:01 --:--:-- 11.1M
📊 [docker.1ms.run] 测速结果: DNS解析时间: 0.013340s 连接时间: 0.016066s 总时间: 1.790445s 下载速度: 11713021B/s
🚩 [hub1.nat.tf] 无需认证,直接测速...
🏃 [hub1.nat.tf] 正在测速...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 41.8M 100 41.8M 0 0 8974k 0 0:00:04 0:00:04 --:--:-- 10.6M
📊 [hub1.nat.tf] 测速结果: DNS解析时间: 0.013273s 连接时间: 0.015449s 总时间: 4.778494s 下载速度: 9189851B/s
🚩 [hub2.nat.tf] 无需认证,直接测速...
🏃 [hub2.nat.tf] 正在测速...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 41.8M 100 41.8M 0 0 12.3M 0 0:00:03 0:00:03 --:--:-- 12.3M
📊 [hub2.nat.tf] 测速结果: DNS解析时间: 0.009979s 连接时间: 0.013772s 总时间: 3.385906s 下载速度: 12969542B/s
🔑 [hub.rat.dev] 需要认证,正在获取token...
📍 [hub.rat.dev] 获取下载地址...
🏃 [hub.rat.dev] 正在测速...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 264 100 264 0 0 197 0 0:00:01 0:00:01 --:--:-- 197
100 20.0M 100 20.0M 0 0 66379 0 0:05:15 0:05:15 --:--:-- 32764
📊 [hub.rat.dev] 测速结果: DNS解析时间: 0.017731s 连接时间: 0.043667s 总时间: 315.935037s 下载速度: 66379B/s
═══════════════ 测试总结 ═══════════════
% 基本统计
✓ 成功测试: 5
✗ 失败测试: 3
Σ 总计测试: 8
🏆 速度排名:
🥇 [ 1] hub2.nat.tf 25.71 MB/s
🥈 [ 2] docker.m.daocloud.io 2.92 MB/s
🥉 [ 3] hub1.nat.tf 1.64 MB/s
[ 4] docker.1ms.run 378.74 KB/s
[ 5] hub.rat.dev 345.19 KB/s
❌ 失败详情:
• docker.1panel.live
无法获取认证信息 (403 Forbidden)
• docker.1panel.top
无法获取认证信息 (429 Too Many Requests)
• docker.ketches.cn
无法获取认证信息 (429 Too Many Requests)
除了用这个脚本进行测速,还有更简单的办法,就是加上完整前缀直接把镜像拉下来。
docker pull docker.gh-proxy.com/nginx
docker pull docker.gh-proxy.com/library/nginx
docker pull docker.gh-proxy.com/docker.io/library/nginx
docker pull docker.1ms.run/library/python
docker pull ghcr.nju.edu.cn/openfaas/queue-worker
docker pull gcr.linkos.org/kubebuilder/kube-rbac-proxy:v0.13.1
这个方法的好处是简单,并且适配任意镜像站,即便是需要 login 授权的;
但缺点是会写入磁盘,同名镜像会缓存,要记得删除下载的镜像;测速也得靠记时器或者人工感知。