利用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://刚刚得到的域名" ]
。最后看起来应该类似:
{
"debug": false,
"registry-mirrors" : [ "https://cf-workers-docker-xxx.pages.dev" ]
}
- 重启启动docker服务(通过systemctl reload或者直接重启服务器),之后便可以使用
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)
之后便可以使用代理拉取镜像!