V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KINGWAY
V2EX  ›  程序员

自建 docker 代理一些方法参考(备忘供各位使用)

  •  2
     
  •   KINGWAY · 159 天前 · 4381 次点击
    这是一个创建于 159 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我选择了通过 cloudflare worker 方式搭建没问题.

    https://51.ruyo.net/18687.html
    第 1 条附言  ·  158 天前
    出于安全原因, 除非你非常相信或者现实生活中知根知底的朋友, 否则还是自建吧, 走 cloudflare 的代理很简单, 动手也就 3 分钟的事情.
    第 2 条附言  ·  158 天前

    我这里附加上Cloudflare反向代理设置方法: 优点:只需有CF账号就行,自己专属,不用自己签发证书 缺点:CF在国内有DNS污染,可能无法正常访问

    简要步骤: 1,登录到CF https://dash.cloudflare.com/ 2,控制台面板 -> 左侧 Workers 和 Pages  ->  创建应用程序  -> 创建 Worker ->  点击保存 -> 点击完成 -> 编辑代码

    import HTML from './docker.html';
    export default {
      async fetch(request) {
        const url = new URL(request.url);
        const path = url.pathname;
        const originalHost = request.headers.get("host");
        const registryHost = "registry-1.docker.io";
        if (path.startsWith("/v2/")) {
          const headers = new Headers(request.headers);
          headers.set("host", registryHost);
          const registryUrl = `https://${registryHost}${path}`;
          const registryRequest = new Request(registryUrl, {
            method: request.method,
            headers: headers,
            body: request.body,
            redirect: "follow",
          });
          const registryResponse = await fetch(registryRequest);
          console.log(registryResponse.status);
          const responseHeaders = new Headers(registryResponse.headers);
          responseHeaders.set("access-control-allow-origin", originalHost);
          responseHeaders.set("access-control-allow-headers", "Authorization");
          return new Response(registryResponse.body, {
            status: registryResponse.status,
            statusText: registryResponse.statusText,
            headers: responseHeaders,
          });
        } else {
          return new Response(HTML.replace(/{{host}}/g, originalHost), {
            status: 200,
            headers: {
              "content-type": "text/html"
            }
          });
        }
      }
    }
    
    
    19 条回复    2024-06-17 23:52:13 +08:00
    xiaoz
        1
    xiaoz  
       159 天前
    我用的 Nexus 3 ,功能很强大,权限粒度可以做到细分。
    kubesre
        2
    kubesre  
       158 天前   ❤️ 2
    多平台容器镜像代理服务,支持 Docker Hub, GitHub, Google, k8s, Quay, Microsoft 等镜像仓库.

    dockerproxy.github.io
    KINGWAY
        3
    KINGWAY  
    OP
       158 天前
    @xiaoz 你那个跑不起来, 试过了.
    totoro625
        4
    totoro625  
       158 天前   ❤️ 3
    @KINGWAY #3 可能跟我遇到的问题一样,提醒一下后来者
    Google 出来的各大教程都没提 Nexus 3 要额外设置一下 Realms 才能正常使用 docker 代理,我也是在犄角旮旯翻出来的
    xiaoz
        5
    xiaoz  
       158 天前   ❤️ 2
    @totoro625 #4 ,是的,要设置的地方还蛮多的。我专门写了一个教程: https://blog.xiaoz.org/archives/20916
    wuyiccc
        6
    wuyiccc  
       158 天前
    harbor 可以配置代理镜像
    Autonomous
        7
    Autonomous  
       158 天前
    @kubesre 感谢分享,这个可以使用。
    dockerhub
        8
    dockerhub  
       158 天前
    我们官方(冒牌)出的不够好用🐶? dockerhub.icu
    weijancc
        9
    weijancc  
       158 天前
    @dockerhub #8 这个域名有点搞
    dockerhub
        10
    dockerhub  
       158 天前
    @weijancc 我可是官方
    KINGWAY
        11
    KINGWAY  
    OP
       158 天前
    @dockerhub 你这个官方让我想起了淘宝的淘工厂的货, 卖家给自己脸上添光说自己是官方, 或者说自己是大牌的行为.
    petercui
        12
    petercui  
       158 天前
    harbor 不香么?
    dockerhub
        14
    dockerhub  
       158 天前
    #11 @KINGWAY 哈哈,就说方便记不?直接上去能用完事。打开速度也快
    huaxing0211
        15
    huaxing0211  
       157 天前
    import HTML from './docker.html';
    Uncaught Error: No such module "docker.html". imported from "worker.js" (Code: 10021)
    worker.js 同目录下新建了 html 文件,但有错,这个是什么问题?
    huaxing0211
        16
    huaxing0211  
       157 天前
    @huaxing0211
    解决了!
    删除或是注释掉:import HTML from './docker.html';
    return new Response(HTML.replace(/{{host}}/g, originalHost)中,“HTML”变量替换为网页代理即可!
    KINGWAY
        17
    KINGWAY  
    OP
       157 天前
    @huaxing0211 其实你看我的一楼推荐的那个博客中有详细说明 docker.html 文件, 只是 docker.hmtl 这个文件字数太多, append 无法搞上, 加上忙就忘记说明了.

    你改为网页代理其实更加好, 某种方面来说有些 fq 用伪装网站就是这个套路.
    yjxjn
        18
    yjxjn  
       157 天前
    @huaxing0211 #15

    我把 import HTML from './docker.html'; 改成了 import HTML from './index.html';
    docker.html 重命名为 index.html ,也是好使的。
    atibm
        19
    atibm  
       157 天前 via Android
    搭过 docker 代理,自己的 VPS 就是方便,建多个实例,但是吧,导致自己 IP 老被封,影响了博客等,还是继续买商家的用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5669 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:40 · PVG 09:40 · LAX 17:40 · JFK 20:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.