从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对
最近一段时间 Docker 镜像一直是 Pull 不下来的状态,感觉除了挂🪜,想直连 Docker Hub 是几乎不可能的。更糟糕的是,很多原本可靠的国内镜像站,例如一些大厂和高校运营的,也陆续关停了,这对我们这些个人开发者和中小企业来说是挺难受的。之前,通过这些镜像站,我们可以快速、方便地获取所需的 Docker 镜像,现在这条路也不行了。感觉这次动作不小,以后想直接访问 Docker Hub 是不可能了。所以我们得想办法搭建自己的私有镜像仓库。
最近网上有很多解决 Docker Hub 镜像拉不下来的文章,我大概总结一下有以下几种办法:
Github Action
利用 Github Action Job 将 Docker Hub 镜像重新打 Tag 推送到阿里云等其他公有云镜像仓库里,这对于需要单个镜像很方便,批量就稍微麻烦一些,如果没🪜Github 访问也是个问题。
CloudFlare Worker
使用 CloudFlare Worker 对 Docker Hub 的访问请求做中转,这种也是最近使用比较多的,因为个人用户的免费计划每天有10万次免费请求,足够个人和中小企业使用了,实在不够可以花 5$ 购买不限制的。Worker 脚本在网上有很多,随便搜索都有示例。
因为 CloudFlare Worker 默认分配的workers.dev
结尾的域名国内根本解析不了,所以要把域名托管在 CloudFlare 上才能正常使用,可以购买 .xyz
等其他费用合适的域名专门用来做代理访问。
但 CloudFlare Worker CDN 经常抽风,有时很快有时很慢,可以借助自选优选IP工具帮助获取访问 CloudFlare 延迟最低的IP,将其写入到你的本地 Hosts 文件中。
自建镜像仓库
说到自建首先我想到的就是买个配置比较低国外的服务器,搭建个 Nginx 做代理,分享下我配置成功的 Nginx 配置文件:
server { listen 443 ssl; server_name 域名; ssl_certificate 证书地址; ssl_certificate_key 密钥地址; ssl_session_timeout 24h; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; location / { proxy_pass https://registry-1.docker.io; # Docker Hub 的官方镜像仓库 proxy_set_header Host registry-1.docker.io; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_buffering off; proxy_set_header Authorization $http_authorization; proxy_pass_header Authorization; proxy_intercept_errors on; recursive_error_pages on; error_page 301 302 307 = @handle_redirect; } location @handle_redirect { resolver 1.1.1.1; set $saved_redirect_location '$upstream_http_location'; proxy_pass $saved_redirect_location; } }
然后就可以直接用 docker pull 域名/library/nginx:latest
获取镜像了或者配置到 Docker 的daemon.json
中。
Nginx 代理的方案你需要能购买到合适的国外服务器,不然网络会很慢。
又或者在国外服务器上搭建 Registry、Nexus、Harbor等镜像仓库,它们具备镜像缓存功能,如果私有镜像仓库中不存在则会去代理服务中获取最新镜像。
建议方案
所以对于个人用户、中小企业来说可以将上述的 CloudFlare Worker
+ 自建镜像仓库
融合起来,本地搭建 Registry、Nexus、Harbor等镜像仓库,在镜像仓库中配置上自己的 CloudFlare Worker
Nginx反代
等代理地址或者当前一些可用的其他代理,当本地不存在则会通过这些代理去获取镜像,代理不可用时本地依然能用。
搭建 Docker Registry
搭建 Docker Registry 可以参考下述命令:
docker run -d --restart=always --name registry \ -p 443:443 -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ #代理的镜像仓库URL -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ #监听地址 -e REGISTRY_HTTP_HOST=https://xxx.cn \ #访问域名 -e REGISTRY_HTTP_TLS_CERTIFICATE=/opt/cert/cert.pem \ #域名证书 -e REGISTRY_HTTP_TLS_KEY=/opt/cert/cert.key \ #域名证书 -v /opt/cert:/opt/cert \ #挂载本地证书到容器中 -v /data:/var/lib/registry \ #持久化数据目录 registry:2
搭建 Nexus
可选择使用 Docker 命令搭建 Nexus。
docker run -d -p 8081:8081 --name nexus sonatype/nexus3
或者使用 Rainbond 应用商店一键安装。
搭建完成后正常登录 Nexus 页面,根据页面引导配置 Docker 相关的存储 Repository 及代理 Repository 即可。
搭建 Harbor
可参考 Harbor文档搭建或者使用 Rainbond 应用商店一键安装。
可用的镜像代理
最近十来天我尝试了很多镜像加速站,整理了以下镜像站目前是可用状态,但可能随时会遇到不可用、关停、访问比较慢的状态,建议同时配置多个镜像源。
| 提供商 | 地址 | | | -------------- | --------------------------------------- | -------------- | | DaoCloud | https://docker.m.daocloud.io | | | 阿里云 | https://<your_code>.mirror.aliyuncs.com | 登录阿里云分配 | | Docker镜像代理 | https://dockerproxy.com | 看运气 | | 百度云 | https://mirror.baidubce.com | | | 南京大学 | https://docker.nju.edu.cn | | | 中科院 | https://mirror.iscas.ac.cn | |
福利
近期 Rainbond 社区也接受到许多用户反馈 Docker 镜像拉不下来,不能构建、打包了,因此 Rainbond 也搭建了个镜像加速服务,采用 CloudFlare + 国外服务器 Nginx 反代
的方案为 Rainbond 社区的用户们提供镜像加速服务。
目前速度挺快的(未来不好说
使用方法
1.直接获取 Docker Hub 镜像
docker pull docker.rainbond.cc/library/node:20 docker pull docker.rainbond.cc/rainbond/rainbond:v5.17.2-release-allinone
2.配置镜像加速器
tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://docker.rainbond.cc"] } EOF systemctl daemon-reload systemctl restart docker

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
缓存有大key?你得知道的一些手段
背景: 最近系统内缓存CPU使用率一直报警,超过设置的70%报警阀值,针对此场景,需要对应解决缓存是否有大key使用问题,扫描缓存集群的大key,针对每个key做优化处理。 以下是扫描出来的大key,此处只放置了有效关键信息。 图1 大key介绍: 想要解决大key,首先我们得知道什么定义为大key。 什么是大KEY: 大key 并不是指 key 的值很大,而是 key 对应的 value 很大(非常占内存)。此处为中间件给出的定义: • 单个String类型的Key大小达到20KB并且OPS高 • 单个String达到100KB • 集合类型的Key总大小达到1MB • 集合类型的Key中元素超过5000个 大KEY带来的影响: 知道了大key的定义,那么我们也得知道大key的带来的影响: • 客户端超时阻塞。 Redis 执行命令是单线程处理,然后在大 key处理时会比较耗时,那么就会发生阻塞 ,期间就会各种业务超时出现。 • 引发网络阻塞。每次获取大 key 产生的网络流量较大,如果一个 key 的大小是 1 MB,每秒访问量为 1000,那么每秒会产...
- 下一篇
纯血鸿蒙来了:全栈自研,面向开发者启动Beta
6月21日,华为开发者大会(HDC 2024)在东莞松山湖开幕。会上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东宣布,鸿蒙 NEXT正式面向开发者启动Beta,8月将发布面向消费者用户的Beta版本。 据了解,华为Mate 60系列、Mate X5、MatePad Pro 13.2英寸等多款设备即日开启升级。未来将有更多设备升级。 余承东表示,纯血鸿蒙从内到外实现全栈自研。“鸿蒙是基于OpenHarmony打造的全场景智能操作系统,这是一个源自中国、自主可控的操作系统。” 原生鸿蒙打破了移动操作系统两极格局,实现操作系统核心技术的自主可控、安全可靠。 此外,鸿蒙NEXT首次将AI能力融入系统,带来AIGC图像生成、AIGC声音修复、AI图像识别等体验。得益于盘古大模型5.0加持,小艺能力全新升级。小艺智能体与导航条融为一体,无论在任何应用界面,都可以随时召唤。只需将文字、图片、文档“投喂”小艺,即可便捷高效处理文字、识别图像、分析文档。 鸿蒙用10年时间,走完了同行30年的路程。如今鸿蒙 NEXT从操作系统内核、文件系统,到编程语言、编译器/运行时、编程框架,再到设...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8编译安装MySQL8.0.19
- CentOS关闭SELinux安全模块
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题