Skip to content
aurorax-neoPublic

About

docker

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Docker Proxy - Cloudflare Snippets Edition

这是一个专为 Cloudflare Snippets (Rules -> Snippets) 设计的极简版 Docker 镜像仓库加速代理脚本。

与传统 Worker 版本相比,此版本移除了繁重的响应体正则替换操作,将代码压缩到了几十行,完美符合 Snippets 严苛的 5ms CPU 耗时限制,并且可以直接绑定在你现有的域名上运行。

✨ 特性

  • 多仓库支持:原生支持代理 Docker Hub、ghcr.io (GitHub)、gcr.io (Google)、quay.io 等常见的第三方镜像库。
  • 动态 Auth 鉴权劫持:兼容多个仓库的不同 Token 服务器,自动拦截 401 鉴权挑战。
  • 429 限流突破:支持注入 Docker 凭证(Personal Access Token),彻底解决 Cloudflare 共享 IP 匿名拉取被限流的问题。
  • 隐蔽防探测 (Stealth Mode):精准拦截非 Docker 规范的请求,静默丢弃并返回 403 Forbidden,防恶意扫描,不暴露代理特征。
  • 官方镜像补全:自动为 nginx 等短名官方 Docker 镜像补足 /v2/library/ 路径。
  • 极简高性能:专为 Snippets 引擎优化,无正则 body 替换,确保不超时。全方法透传支持镜像拉取和推送。

🚀 部署指南 (Cloudflare Snippets)

  1. 登录 Cloudflare 控制台,进入你的域名管理面板。
  2. 在左侧菜单栏找到 Rules (规则) -> Snippets (片段)。
  3. 点击 Create Snippet,给它取个名字(如 docker-proxy)。
  4. 将本项目中 index.js 的代码全部复制并粘贴到代码框中。
  5. 在 Filter (过滤器) 中配置该规则的触发条件。例如:
    • 匹配 Hostname 等于 docker.你的域名.com
    • (请确保你已经在 DNS 里将 docker.你的域名.com 代理状态开启,即点亮黄色的云朵)
  6. 点击 Save and Deploy (保存并部署)。

💻 客户端使用指南

1. 拉取常规 Docker Hub 镜像

通过修改 daemon 配置,实现无缝拉取。编辑 /etc/docker/daemon.json:

{
  "registry-mirrors": [
    "https://docker.你的域名.com"
  ]
}

重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

测试拉取:

docker pull alpine

2. 拉取第三方镜像 (如 ghcr.io, gcr.io)

⚠️ 注意:Docker 的 registry-mirrors 机制天生只对 Docker Hub 生效。对于其它第三方仓库,你必须手动在镜像名称前面加上你的代理域名!

原命令: docker pull ghcr.io/wg-easy/wg-easy:15.4.0

加速拉取命令: docker pull docker.你的域名.com/ghcr.io/wg-easy/wg-easy:15.4.0

脚本会自动识别路径中的 ghcr.io,剥离多余路径,并去正确的服务器拉取资源及鉴权。

🛠 常见问题排查

遇到 429 Too Many Requests 报错?

由于 Cloudflare 的出口 IP 被全球网民大量共用,Docker Hub 会极快耗尽对这些 IP 的“匿名拉取额度”(100次/6小时)。

解决方案:在脚本中绑定你的个人 Docker 账号来绕过匿名限制!

  1. 前往 Docker Hub - Security 申请一个 Personal Access Token (PAT)。
  2. 获取你的 Docker ID (英文用户名,非邮箱)。
  3. 在本地终端生成 Base64 凭证:
    echo -n "你的DockerID:生成的Token" | base64
  4. 将输出的那串乱码(例如 dXNlcjpwYXNz)填写到 index.js 的以下位置中:
    const DOCKER_AUTH_B64 = "填入你的Base64字符串"; 
  5. 重新保存并部署 Snippet,以后所有的请求都会走你个人账号的 200次/6小时 独立额度,彻底告别 429。

About

docker

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages