标签 GitHub 下的文章

由于众所周不知的原因,docker hub已经不能从国内正常访问。这时我们可以通过访问正常访问的docker hub镜像网站,实现正常拉取镜像。

本文介绍如何通过在Cloudflare中部署一个镜像页面,并合理配置服务器或者Windows/MacOS中的Docker引擎,实现曲线救国。

一、前提

二、GitHub CF-Workers-docker.io 项目

docker-hub-01.png

CF-Workers-docker.io 是一个 Docker 仓库镜像代理工具。官方描述为:

这个项目是一个基于 Cloudflare Workers 的 Docker 镜像代理工具。它能够中转对 Docker 官方镜像仓库的请求,解决一些访问限制和加速访问的问题。

仓库地址 https://github.com/cmliu/CF-Workers-docker.io 仓库说明中也包含了其他已经部署的镜像,如果不想自己部署Cloudflare,也可以直接跳过第三部分,直接拿来进入第四部分的配置进行操作。

注册登陆GitHub并进入该仓库后,Fork到自己的仓库。

三、在Cloudflare部署代理工具

  1. 登录Cloudflare
  2. 点击 Worker和Pages 再点 概述(Overview) 再点 新建(Create)
    docker-hub-02.png
  3. 新界面中切换到 Pages 页签,点击 连接到Git(Connect to Git)
    docker-hub-03.png
  4. 选择 GitHub 页签,并选择自己的github账户。注意:如果之前没有关联,可能需要通过添加账户(Add Account)先行添加。之后在下方选择之前fork到自己仓库的项目,名称应该为 CF-Workers-docker.io,最后点击右下角的开始设置(Begin Setup)按钮。
    docker-hub-04.png
  5. 确认页面不用修改,直接点击保存并部署(Save and Deploy),等待部署完成。
    docker-hub-05.png
  6. 点击继续处理项目(Continue to Process Project)
  7. 最后得到一个域名,类似cf-workers-docker-io-xxx.pages.dev。点击页面右上角的访问(Visit),打开就是docker hub的搜索页面。

四、设置docker守护进程配置中的 registry-mirrors 属性

  • 原理:通过设置docker守护进程配置docker-daemon.json文件中的registry-mirrors顶级属性,可以让Docker直接访问docker hub的镜像站点。与Ubuntu的镜像软件中心、Node.js npm的源地址、Python pipy的源地址等是一个道理。
  • 注意:编辑docker-daemon.json文件时,务必遵守JSON格式规则,否则会引起Docker崩溃。

Linxu 服务器上使用代理

  1. 使用ssh或者类似工具登陆服务器。修改 /etc/docker/daemon.json 文件,(如果没有则直接新建),添加registry-mirrors 顶级属性"registry-mirrors" : [ "https://刚刚得到的域名" ]。最后看起来应该类似:
{
  "debug": false,
  "registry-mirrors" : [ "https://cf-workers-docker-xxx.pages.dev" ]
}
  1. 重启启动docker服务(通过systemctl reload或者直接重启服务器),之后便可以使用

MacOSWindows 中使用代理

MacOSWindows 一般都使用Docker Desktop管理Docker,可以非常方便的配置Docker引擎

  1. 打开docker desktop,依次点击右上角⚙️(齿轮),设置界面中的Docker Engine, 并在左侧的json文本编辑器中添加registry-mirrors 顶级属性"registry-mirrors" : [ "https://刚刚得到的域名" ]。最后看起来类似:

    {
      "builder": {
     "gc": {
       "defaultKeepStorage": "20GB",
       "enabled": true
     }
      },
      "debug": true,
      "experimental": false,
      "registry-mirrors" : [ "https://cf-workers-docker-xxx.pages.dev" ]
    }

    docker-hub-06.png

  2. 点击右下角 应用并重启(Apply and Restart) 之后便可以使用代理拉取镜像!

延伸:更多的容器仓库需要镜像/代理怎么办?

使用国内开源镜像加速服务

比如南京大学镜像 官网南京大学开源镜像 GHCR

还是使用Cloudflare Worker进行路由转发:

可以使用GitHub上的cloudflare-docker-proxy这个项目来实现对 docker hub, gcr.io, ghcr.io, k8s.gcr.io, quay.io 等容器仓库的代理和流量转发。具体可以参考其主页文档。