利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题
背景:
前段时间dockerhub因为比较复杂的原因在国内被墙了
之前只是register服务器被禁用,还能通过使用国内众多的镜像使用
或者通过命令行docker pull拉取镜像
但是这回所有镜像站都被关闭命令行也不好使了。
这直接导致群晖dsm7.x的container manager也无法下载镜像
经常更新镜像的项目,需要开全局代理才能够正常拉取镜像,特别麻烦。
尤其是docker engine/cli这些镜像的配置非常的麻烦,远比常规的bash代理复杂很多。
对于很多nas用户来说非常使用非常困难
特别是这类配置代理的手段,需要重启整个docker daemon
说人话就是要关掉所有正在运行的 容器
但是天无绝人之路,前两天看到一篇利用cloudflare pages搭建临时的镜像的文章
试了试,还真的有效
原帖的地址在这里
[20行代码解决dockerhub的访问问题] https://zhuanlan.zhihu.com/p/705937780
感兴趣的可以去原帖查看
省流:
这个方法应该同时适用于dsm6.x和dsm7.x,具体细节可能因为两个版本系统会有差异
你需要做的就是注册cloudflare和github
使用这种方法的代理后,拉取镜像的速度可以跑满带宽
什么是cloudflare
这里先简单介绍一下cloudflare
Cloudflare, Inc. 是一家美国公司,提供内容分发网络服务、云网络安全、DDoS缓解、域名服务以及ICANN认证的域名注册服务。Cloudflare的总部位于加利福尼亚州的旧金山。--引用自bing
下面简称CF
CF是一个全球范围的cdn超级巨头,为很多公司的服务器提供cdn服务
(cdn就是类似一个很远的网站,缓存在一些内容在离你比较近的cdn服务器,这样访问延迟,目标服务器压力都会小很多)
值友很多应该听说过PCDN,这个就是一个差不多,cdn服务。
CF的规模很大,也提供很多免费的服务可以白嫖。
比如什么常见的DNS域名托管,解析,也对个人网站提供限量的免费的cdn服务。
简单说就是可以白嫖很多服务了,具体细节去看别的文章吧
这里要用到就是CF提供的一个pages,网站服务
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://am.zdmimg.com/202406/29/667fd531dfc0f4499.png_e1080.jpg)
大概就是给你提供一个免费的小网站服务器,你没法直接操作。
我们要用的就是用CF这个pages服务为dockerhub搭建一个临时的访问点。
当你用docker 访问这个站点时,可以自动转发给dockerhub
实现一个类似nginx 那样的代理效果。
重点是免费
一天提供10000次访问,对于nas用户和一些科研需要的用户,完全足够了
什么是github
github实际上是一个很大的,代码托管平台,简单就是提供免费的代码存放 管理服务,
很多人会把自己的代码上传到上面分享,方便其他用户使用,也有很多商业公司在使用github。
github也提供很多免费的服务,比如常见的action自动构建,可以用来编译一些代码,例如openwrt镜像。还有github.io 免费静态网站,可以为自己生成一个免费的静态页面网站,还给你一个不错的域名,但是不能用于其他用途。
想要使用代理
首先你需要在这两个网站上面注册,这里我就略过了
可能有点麻烦的会是github注册,因为可能需要用到2FA,简单说就是一个手机令牌
你可以下载一个microsoft authenticator app来绑定。
Cloudflare的注册就比较简单了,常规的邮箱注册即可。
Github fork项目
这里教程中提到的项目就是位于 whyun-pages/docker-registry (github.com)。
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://qnam.smzdm.com/202406/29/667fd7cbceaf95025.png_e1080.jpg)
然后你需要打开这个项目的网站
按上面的图片点击右上角的fork按钮 (fork的意思是分叉,复制的意思
然后点击确定,复制一份他的代码到你的github仓库当中。
从右上角点击头像,打开your repositories
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://am.zdmimg.com/202406/29/667fd873119ac8535.png_e1080.jpg)
你就能能够看到一个从作者那里fork过来的docker-registry项目了。
剩下的流程就很简单了,跟着上面帖子的流程走就行了。
走完上述流程,你应该可以打开一个这样的镜像网站
(可能需要等几分钟,因为你新开的网站,域名dns解析刷新需要时间
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://am.zdmimg.com/202406/29/667fd974e48944792.png_e1080.jpg)
给群晖配置代理镜像
流程很简单,先打开群晖的container manager
当然dsm6的docker应该也能使用
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://qnam.smzdm.com/202406/29/667fd9cff1df47265.png_e1080.jpg)
切换到注册表,点击上方的设置
让我们开始设置镜像代理
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://am.zdmimg.com/202406/29/667fda09838233223.png_e1080.jpg)
我们需要修改一下原有的docker hub注册项
像这样
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://qnam.smzdm.com/202406/29/667fda3d20fd26455.png_e1080.jpg)
如果没有这个的话,你也可以手动添加一个
点击新增即可
注册表名称随意: 毕竟只是名称,你可以改成cloudflare
然后注册表url 是 https://index.docker.io
勾选启用注册表镜像,对应的url里面填入你在CF pages得到的那个网站页面地址
勾选下面的信任的ssl自我签署证书。
上面的记得都要带上https
填完点击确定后,
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://am.zdmimg.com/202406/29/667fdb2dbcd875810.png_e1080.jpg)
返回上一级,选择你新建的项,然后点击那个使用
这样就选择了这个项作为dockerhub注册的项目了。
确定后,回到container manager里面
点击注册表,随意搜索一个镜像
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://am.zdmimg.com/202406/29/667fdc148e76f1226.png_e1080.jpg)
然后我们拉取试试
![利用CloudFlare解决群晖DockerHub被禁后无法拉取镜像问题](https://qnam.smzdm.com/202406/29/667fdcba8a9b7196.png_e1080.jpg)
可以看到有下载速度,并且速度非常夸张的跑满了带宽
可以说效果非常棒。
当然记得不要随意泄漏你们的临时镜像的域名
不然可能会被别人大量拉取,然后超过使用上限。
希望这篇帖子能够帮到大家
然后有什么问题可以在评论区提问
偶尔会回复一下
部分地区可能因为宽带运营商的问题会无法访问github,所以可能会需要代理(比如说移动宽带)
拜拜
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
![](https://res.smzdm.com/pc/pc_shequ/dist/img/the-end.png)
wtj1992
校验提示文案
Watching98
校验提示文案
无字添书
校验提示文案
weicj
校验提示文案
weicj
校验提示文案
无字添书
校验提示文案
Watching98
校验提示文案
wtj1992
校验提示文案