Skip to content

servless/cloudflare-docker-proxy

Repository files navigation

Cloudflare Docker Proxy

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

部署教程

前提条件

  1. 一个 Cloudflare 账号。
  2. 本地已安装 Node.js 和 npm。

1. 登录 Cloudflare

确保你已经在本地通过 wrangler 登录:

npx wrangler login

2. 自动化部署 (推荐)

项目提供了一个 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

3. 手动部署 (可选)

如果你不想使用脚本,可以按照以下步骤手动操作:

  1. 创建 KV 命名空间
    npx wrangler kv namespace create DOCKER_ROUTES
  2. 更新配置:将返回的 id 填写到 wrangler.jsonckv_namespaces 部分。
  3. 部署
    • Workers: npx wrangler deploy
    • Pages: 需手动调整 wrangler.jsonc 并运行 npx wrangler pages deploy

配置路由

你可以通过向 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 429 限流

你可以配置自己的 Docker Hub 凭据来获得更高的拉取配额:

  1. Docker Hub 创建一个 Access Token

  2. 设置加密变量:

    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 <你的项目名>

绑定自定义域名

  1. 在 Cloudflare 控制台进入 Workers & Pages
  2. 选择你的项目,进入 Settings -> Domains & Routes
  3. 点击 Add Custom Domain 绑定你的域名。

许可证

本项目基于 Apache-2.0 许可证 开源。

About

基于 CloudFlare Workers 的各种容器注册表代理

Resources

License

Stars

Watchers

Forks

Contributors