一、为什么你的镜像加速器失效了?
由于近期网络环境变化,传统的 Docker 镜像站大面积失效。即便使用了代理,很多国内服务器在拉取镜像时仍会报错: failed to fetch anonymous token: dial tcp 31.13.69.245:443: connect: connection refused 这是因为 Docker 的认证服务器 (auth.docker.io) 无法连接。我们需要一个能同时代理“镜像数据”和“认证令牌”的方案。
二、部署Cloudflare Workers 代理
Cloudflare Workers 提供的边缘计算能力,可以让我们在请求流经时,动态修改认证头信息,让 Docker 客户端误以为“认证服务器就是你的代理站”,从而实现全程闭环访问。
1. 创建 Worker
- 登录 Cloudflare 控制台。
- 进入 Workers 和 Pages -> 创建应用程序,

- 点击 从 Hello World! ,输入 Worker name(自定义子域名),点击 部署。


- 部署后,等部署刷新界面后,进入 编辑代码 界面。

2. 部署脚本
清空默认代码,粘贴以下经过实测优化的代码:
// Cloudflare Worker 代码开始
const hub_host = 'registry-1.docker.io'
const auth_url = 'https://auth.docker.io'
async function handleRequest(request) {
const url = new URL(request.url);
const path = url.pathname;
// 1. 处理 Token 认证请求:拦截并转发至官方认证服务器
if (path === '/v2/token' || path === '/token') {
const newUrl = new URL(auth_url + path + url.search);
return fetch(new Request(newUrl, request));
}
// 2. 转发镜像层数据请求
const newUrl = new URL('https://' + hub_host + path + url.search);
let response = await fetch(new Request(newUrl, request));
// 3. 核心步骤:修改认证挑战响应头
// 告知客户端不再去访问 auth.docker.io,而是回到当前域名下获取 Token
let newResponse = new Response(response.body, response);
if (response.headers.has('Www-Authenticate')) {
let authHeader = response.headers.get('Www-Authenticate');
let re = new RegExp(auth_url, 'g');
newResponse.headers.set('Www-Authenticate', authHeader.replace(re, 'https://' + url.hostname));
}
return newResponse;
}
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
![图片[1] - 国内 Docker 拉取失败?手把手教你用 Cloudflare 搭建私有镜像加速器 - HXL Blog](https://www.huangxiaolong.net/wp-content/uploads/2026/04/d2b5ca33bd20260411162924-scaled.png)
三、 关键:绑定自定义域名
注意: 默认的 *.workers.dev 域名在国内访问极不稳定,直接绑定自己的域名可靠一些。
![图片[2] - 国内 Docker 拉取失败?手把手教你用 Cloudflare 搭建私有镜像加速器 - HXL Blog](https://www.huangxiaolong.net/wp-content/uploads/2026/04/d2b5ca33bd20260411163145-scaled.png)
- 在 Worker 的 设置 -> 域和路由 中点击 添加。
- 绑定一个你自己的二级域名(例如:
docker.yourdomain.com)。
四、 如何在服务器上使用?
方式 1:临时测试使用
直接在拉取镜像时加上前缀:
docker pull docker.yourdomain.com/library/alpine:latest
方式 2:永久配置 (以 1Panel 为例)
- 登录 1Panel 面板,进入 容器 -> 配置。
- 在 镜像加速 栏目点击编辑。
- 添加你的自定义域名地址:
https://docker.yourdomain.com。 - 保存后,Docker 将自动通过你的 Worker 加速。
五、 常见问题与限制 (FAQ)
- 流量够用吗? 免费版每天 10 万次请求,个人使用几乎相当于无限。
- 会被封吗? 只要不公开做大型公共站,低频自用非常安全。
- 拉取依然 404? 检查代码中是否包含了
/v2/token和/token的双重匹配,这是兼容不同版本 Docker 客户端的关键。
💡 博主提示: 搭建完成后,建议先用
curl -I https://你的域名/v2/ 测试。如果返回 401 Unauthorized,说明你的“私人镜像搬运站”已经正式开张了!© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END















暂无评论内容