通过限制访问,实现纯私有Docker镜像

avatar
作者
筋斗云
阅读量:0

怎么会不过审呢?没有敏感信息呀。

For obvious reasons,Many Docker image repositories are inaccessible,The official warehouse has also been filtered by the firewall,So write about how to build a self use Docker image using CloudFlare's Workers and Pages.

其实已经有很多篇这样的教程了,但镜像搭建完基本就是所有人所有时间都能访问,这样就有两个问题:

  • 第一是访问的人太多,流程太高,CF会封号。
  • 第二是很多人都访问的话,域名容易被wall。

所以我写了个可以定时开放的脚本,这样就可以在规定的时间段内打开,或者只在自己想用的时候手动去打开。

下面是实现步骤:

1. 登录CF平台

https://dash.cloudflare.com/

2. 创建Worker

点击Workers 和 Pages -->创建

创建Worker

给Worker命名(随意起个英文名),点击【部署】

3. 部署代码

进入到部署成功页面后,再点击【编辑代码】

把如下代码粘贴进去

// Docker镜像仓库主机地址 let hub_host = 'registry-1.docker.io'; // Docker认证服务器地址 const auth_url = 'https://auth.docker.io'; // 自定义的工作服务器地址 let workers_url = 'https://docker.yourdomain.com';  let 屏蔽爬虫UA = ['netcraft'];  // 根据主机名选择对应的上游地址 function routeByHosts(host) {     // 定义路由表     const routes = {         // 生产环境         "quay": "quay.io",         "gcr": "gcr.io",         "k8s-gcr": "k8s.gcr.io",         "k8s": "registry.k8s.io",         "ghcr": "ghcr.io",         "cloudsmith": "docker.cloudsmith.io",          // 测试环境         "test": "registry-1.docker.io",     };      if (host in routes) return [routes[host], false];     else return [hub_host, true]; }  /** @type {RequestInit} */ const PREFLIGHT_INIT = {     // 预检请求配置     headers: new Headers({         'access-control-allow-origin': '*', // 允许所有来源         'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS', // 允许的HTTP方法         'access-control-max-age': '1728000', // 预检请求的缓存时间     }), };  /**  * 构造响应  * @param {any} body 响应体  * @param {number} status 响应状态码  * @param {Object<string, string>} headers 响应头  */ function makeRes(body, status = 200, headers = {}) {     headers['access-control-allow-origin'] = '*'; // 允许所有来源     return new Response(body, { status, headers }); // 返回新构造的响应 }  /**  * 构造新的URL对象  * @param {string} urlStr URL字符串  */ function newUrl(urlStr) {     try {         return new URL(urlStr); // 尝试构造新的URL对象     } catch (err) {         return null; // 构造失败返回null     } }  function isUUID(uu

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!