Skip to content

servless/cloudflare-docker-proxy

Repository files navigation

Cloudflare Docker Proxy

English | 简体中文

这是一个 Cloudflare Worker,用作各种容器注册表的代理。它已重构为使用 Cloudflare KV 后端进行动态路由。

功能

  • 通过 Cloudflare KV 进行动态路由。
  • 支持 Docker Hub、Quay、GCR 等。
  • 处理 Docker Hub 官方镜像重定向(例如:busybox -> library/busybox)。
  • 处理身份验证令牌获取。

部署教程

前提条件

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

1. 设置 Cloudflare KV

本项目使用 Cloudflare KV 存储动态路由信息。

  1. 创建一个 KV 命名空间:
    npx wrangler kv namespace create ROUTES
  2. 记录输出中的 id
  3. 更新 wrangler.jsonc 文件,将 YOUR_KV_NAMESPACE_ID_HERE 替换为你实际的 KV 命名空间 ID。

2. 部署到 Cloudflare

运行部署命令:

npm run deploy

3. 配置路由

你可以通过向 KV 命名空间添加键值对来配置路由。键应该是主机名(例如 docker.example.com),值应该是上游注册表 URL(例如 https://registry-1.docker.io)。

示例:

npx wrangler kv key put --binding=ROUTES "docker.example.com" "https://registry-1.docker.io"

预定义的子域名路由

如果你的主机名包含多于两个部分(例如 docker.example.com),Worker 会自动检查第一部分(子域名)是否匹配以下默认配置:

  • 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

4. 解决 Docker Hub 429 限流问题 (可选)

由于 Cloudflare 的出口 IP 是共享的,匿名拉取 Docker Hub 镜像时常会遇到 429 Too Many Requests。你可以通过配置自己的 Docker Hub 凭据来解决:

  1. Docker Hub 账户设置中创建一个 Access Token
  2. 使用 wrangler 将凭据存入 Worker 的加密变量中:
    npx wrangler secret put DOCKER_USERNAME
    # 输入你的 Docker Hub 用户名
    npx wrangler secret put DOCKER_PASSWORD
    # 输入你创建的 Access Token

配置完成后,Worker 将自动代表你进行认证,从而获得更高的拉取配额。

5. 自定义域名

请确保已在 Cloudflare Dashboard 中将你的主机名(例如 docker.example.com)添加为该 Worker 的 自定义域名 (Custom Domains)

测试

npm test

About

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

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published