利用Cloudflare和Docker仓库镜像代理工具（GitHub）解决无法连接Dokcer Hub问题
由于众所周不知的原因，docker hub已经不能从国内正常访问。这时我们可以通过访问正常访问的docker hub镜像网站，实现正常拉取镜像。本文介绍如何通过在Cloudflare中部署一个镜像页面，并合理配置服务器或者Windows/MacOS中的Docker引擎，实现曲线救国。一、前提一个github账号（github : https://github.com）一个Cloudflare 账号（cloudflare : https://cloudflare.com）二、GitHub CF-Workers-docker.io 项目CF-Workers-docker.io 是一个 Docker 仓库镜像代理工具。官方描述为：这个项目是一个基于 Cloudflare Workers 的 Docker 镜像代理工具。它能够中转对 Docker 官方镜像仓库的请求，解决一些访问限制和加速访问的问题。仓库地址 https://github.com/cmliu/CF-Workers-docker.io 仓库说明中也包含了其他已经部署的镜像，如果不想自己部署Cloudflare，也可以直接跳过第三部分，直接拿来进入第四部分的配置进行操作。注册登陆GitHub并进入该仓库后，Fork到自己的仓库。三、在Cloudflare部署代理工具登录Cloudflare点击 Worker和Pages 再点 概述（Overview） 再点 新建（Create）新界面中切换到 Pages 页签，点击 连接到Git(Connect to Git)选择 GitHub 页签，并选择自己的github账户。注意：如果之前没有关联，可能需要通过添加账户(Add Account)先行添加。之后在下方选择之前fork到自己仓库的项目，名称应该为 CF-Workers-docker.io，最后点击右下角的开始设置(Begin Setup)按钮。确认页面不用修改，直接点击保存并部署(Save and Deploy)，等待部署完成。点击继续处理项目(Continue to Process Project)最后得到一个域名,类似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 服务器上使用代理使用ssh或者类似工具登陆服务器。修改 /etc/docker/daemon.json 文件，（如果没有则直接新建），添加registry-mirrors 顶级属性"registry-mirrors" : [ "https://刚刚得到的域名" ]。最后看起来应该类似：{ "registry-mirrors" : [ "https://cf-workers-docker-xxx.pages.dev" ] }重启docker服务（通过systemctl restart docker.service或者直接重启服务器），之后便可以使用MacOS 或 Windows 中使用代理MacOS 或 Windows 一般都使用Docker Desktop管理Docker，可以非常方便的配置Docker引擎打开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" ] }点击右下角 应用并重启(Apply and Restart) 之后便可以使用代理拉取镜像！延伸：更多的容器仓库需要镜像/代理怎么办？使用国内开源镜像加速服务比如南京大学镜像 官网｜南京大学开源镜像 GHCR还是使用Cloudflare Worker进行路由转发：可以使用GitHub上的cloudflare-docker-proxy这个项目来实现对 docker hub, gcr.io, ghcr.io, k8s.gcr.io, quay.io 等容器仓库的代理和流量转发。具体可以参考其主页文档。