English | 简体中文
这是一个高性能的 Cloudflare Worker / Pages 代理脚本,用于代理各种容器注册表(Container Registries)。它支持通过 Cloudflare KV 后端进行动态路由配置。
- 动态路由:通过 Cloudflare KV 灵活配置域名与上游注册表的映射。
- 多注册表支持:默认支持 Docker Hub、Quay、GCR、GitHub Packages (GHCR) 等。
- 智能重定向:自动处理 Docker Hub 官方镜像的重定向(例如
busybox->library/busybox)。 - 身份验证代理:支持配置 Docker Hub 凭据以解决
429 Too Many Requests限流问题。 - 双模式部署:完美支持 Cloudflare Workers 和 Pages 部署。
部署成功后,你只需要将原来的 docker pull 命令中的域名替换为你的自定义域名即可:
# 原命令
docker pull busybox
# 使用代理(假设你的域名为 docker.example.com)
docker pull docker.example.com/library/busybox- 一个 Cloudflare 账号。
- 本地已安装 Node.js 和 npm。
确保你已经在本地通过 wrangler 登录:
npx wrangler login项目提供了一个 deploy.sh 脚本,可以自动处理 KV 创建、ID 同步以及模式切换。
部署为 Workers:
chmod +x deploy.sh
./deploy.sh -m workers部署为 Pages:
chmod +x deploy.sh
./deploy.sh -m pages注意:如果你使用了自定义配置文件(如 my-config.jsonc),可以通过 -c 参数指定:./deploy.sh -c my-config.jsonc -m pages。
如果你不想使用脚本,可以按照以下步骤手动操作:
- 创建 KV 命名空间:
npx wrangler kv namespace create DOCKER_ROUTES
- 更新配置:将返回的
id填写到wrangler.jsonc的kv_namespaces部分。 - 部署:
- Workers:
npx wrangler deploy - Pages: 需手动调整
wrangler.jsonc并运行npx wrangler pages deploy
- Workers:
你可以通过向 KV 命名空间添加键值对来配置路由。
- 键 (Key):你的自定义域名(例如
docker.example.com)。 - 值 (Value):上游注册表 URL(例如
https://registry-1.docker.io)。
使用命令行添加:
npx wrangler kv key put --binding=DOCKER_ROUTES "docker.example.com" "https://registry-1.docker.io"为了方便使用,Worker 会根据子域名自动尝试匹配以下注册表:
| 子域名 | 上游注册表 (Upstream Registry) |
|---|---|
docker |
https://registry-1.docker.io |
quay |
https://quay.io |
gcr |
https://gcr.io |
k8s-gcr |
https://k8s.gcr.io |
k8s |
https://registry.k8s.io |
ghcr |
https://ghcr.io |
cloudsmith |
https://docker.cloudsmith.io |
ecr |
https://public.ecr.aws |
你可以配置自己的 Docker Hub 凭据来获得更高的拉取配额:
-
在 Docker Hub 创建一个 Access Token。
-
设置加密变量:
Workers 模式:
npx wrangler secret put DOCKER_USERNAME npx wrangler secret put DOCKER_PASSWORD
Pages 模式:
npx wrangler pages secret put DOCKER_USERNAME --project-name <你的项目名> npx wrangler pages secret put DOCKER_PASSWORD --project-name <你的项目名>
- 在 Cloudflare 控制台进入 Workers & Pages。
- 选择你的项目,进入 Settings -> Domains & Routes。
- 点击 Add Custom Domain 绑定你的域名。
本项目基于 Apache-2.0 许可证 开源。