Docker 镜像拉不动?自建 Docker Hub 加速站 解决镜像拉取失败

本文首发于只抄博客,欢迎点击原文链接了解更多内容。

前言

众所周知,6 月份的时候,Docker Hub 的镜像就已经无法正常拉取,那会随手用 Nginx 反代了一下 Docker Hub,建了个自用的镜像站,一直用到了 9 月份,发现自建的镜像站也无法正常的拉取镜像了,看 Nginx 的日志全是 401 错误。

而拉取时候的报错则是连接不到 auth.docker.io,没想到是认证的域名也访问不到了,所以自己反代的镜像站也就无法拉取了。

docker-hub-1

于是在这里总结一下国内可以正常拉取镜像的方法,一种方法行不通了可以其他方法接着用

  • 通过 Nginx 反代 Docker Hub,现在还需要同时反代 auth.docker.io
  • 通过 Cloudflare Workers 反代
  • Docker 配置 Proxy

Nginx 反代

使用 1Panel 的还需要将 Nginx 自带配置中的 proxy_set_header Host $host; 注释掉

将下方 add_header www-authenticate 中的域名修改为自己的域名

location /v2/ {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;# 重写 www-authenticate 头为你的反代地址proxy_hide_header www-authenticate;add_header www-authenticate 'Bearer realm="https://mirrors.domain.com/token",service="registry.docker.io"' always;# always 参数确保该头部在返回 401 错误时无论什么情况下都会被添加。# 对 upstream 状态码检查,实现 error_page 错误重定向proxy_intercept_errors on;# error_page 指令默认只检查了第一次后端返回的状态码,开启后可以跟随多次重定向。recursive_error_pages on;# 根据状态码执行对应操作,以下为301、302、307状态码都会触发error_page 301 302 307 = @handle_redirect;}
# 处理 Docker OAuth2 Token 认证请求
location /token {resolver 1.1.1.1 valid=600s;proxy_pass https://auth.docker.io; # Docker 认证服务器# 设置请求头,确保转发正确proxy_set_header Host auth.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;# 传递 Authorization 头信息,获取 Tokenproxy_set_header Authorization $http_authorization;proxy_pass_header Authorization;# 禁用缓存proxy_buffering off;
}
location @handle_redirect {resolver 1.1.1.1;set $saved_redirect_location '$upstream_http_location';proxy_pass $saved_redirect_location;
}

Workers 反代

如果你没有自己的 VPS,那么可以使用 Cloudflare 提供的 Workers 进行反代,但需要注意的,反代可能会违反 Cloudflare 的 ToS 导致账号违规

点击左侧的 Worker & Pages,然后点击 Create Worker 来新建一个 Worker

创建 Worker

名字可以随意命名,可以直接点击右下角的 Deploy 进行部署

命名 & 部署

然后编辑代码,将自带的内容全部删除后,复制 Github 的 _worker.js 中的代码并将 workers_url 修改为自己的绑定的域名

部署

由于自带的 workers.dev 域名无法正常访问,还需要在 Settings -> Domains & Routes 绑定自己的域名

绑定域名

使用方法

单次使用

直接在原拉取命令前添加镜像站地址

docker pull mirrors.domain.com/whyour/qinglong:latest

全局使用

通过在配置文件中填写 registry-mirrors 后,你可以直接使用原来的拉取命令来获取镜像

创建 /etc/docker/daemon.json 文件,填入以下内容

{"registry-mirrors": ["https://mirrors.domain.com"]
}

保存后,重启 Docker

systemctl daemon-reload
systemctl restart docker

配置 Proxy

如果你没有镜像站,也可以直接配置 Proxy,让 Docker 拉取镜像时走 Proxy 也能够正常使用

创建 /etc/systemd/system/docker.service.d 目录,并在该目录下新建 http-proxy.conf 文件填入以下内容

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"

保存后,重启 Docker

systemctl daemon-reload
systemctl restart docker

注意事项

自建的镜像站不要公开使用,Docker Hub 对于拉取频率有限制,对于匿名用户,限制设置为每个 IP 地址每 6 小时 100 次拉取。

通过以下请求获取 Token

TOKEN=$(curl "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)

再通过以下请求查看返回的 ratelimit-remaining 值就代表还剩下几次可以拉取

curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/884946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真·香!深度体验 zCloud 数据库云管平台 -- DBA日常管理篇

点击蓝字 关注我们 zCloud 作为一款业界领先的数据库云管平台,通过云化自治的部署能力、智能巡检和诊断能力、知识即代码的沉淀能力,为DBA的日常管理工作带来了革新式的简化与优化。经过一周的深度体验,今天笔者与您深入探讨 zCloud 在数据库…

Qt的程序如何打包详细教学

生成Release版的程序 在打包Qt程序时,我们需要将发布程序需要切换为Release版本(Debug为调试版本),编译器会对生成的Release版可执行程序进行优化,使生成的可执行程序会更小。 debug版本 debug版本是一种开发过程中的…

适配器模式:类适配器与对象适配器

适配器模式是一种结构性设计模式,旨在将一个接口转换成客户端所期望的另一种接口。它通常用于解决由于接口不兼容而导致的类之间的通信问题。适配器模式主要有两种实现方式:类适配器和对象适配器。下面,我们将详细探讨这两种方式的优缺点及适…

语音识别:docker部署FunASR以及springboot集成funasr

内容摘选自: https://github.com/modelscope/FunASR/blob/main/runtime/docs/SDK_advanced_guide_offline_zh.md FunASR FunASR是一个基础语音识别工具包,提供多种功能,包括语音识别(ASR)、语音端点检测(VAD&#xf…

oracle-函数-NULLIF (expr1, expr2)的妙用

【语法】NULLIF (expr1, expr2) 【功能】expr1和expr2相等返回NULL,不相等返回expr1经典的使用场景: 1. 数据清洗与转换 在数据清洗过程中,NULLIF 函数可以用于将某些特定值(通常是无效或不需要的值)替换为 NULL&…

【LLM】Agentic Workflow的四种常见思路

note Reflection 和 Tool Use 属于比较经典且相对已经广泛使用的方式,Planning 和 Multi-agent 属于比较新颖比较有前景的方式。 文章目录 note一、四种设计模式1. Reflection2. Tool use3. Planning4. Multi-agent collaboration 二、相关代码实践 一、四种设计模…

Python数据可视化seaborn

产品经理在做数据分析时可能需要通过可视化来分析。seaborn官网 1. relplot 散点图 https://seaborn.pydata.org/examples/scatterplot_sizes.html import pandas as pd import seaborn as sns df pd.DataFrame({x: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],y: [8, 6, 7, 8, 4, 6,…

基于ssm的个人健康管理系统

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

CSS3新增渐变(线性渐变、径向渐变、重复渐变)

1.线性渐变 代码: 效果图: 使文字填充背景颜色: 效果图: 2.径向渐变 代码: 效果图: 代码图: 效果图: 3.重复渐变 代码: 效果图:

[mysql]mysql的DML数据操作语言增删改,以及新特性计算列,阿里巴巴开发手册mysql相关

1DML数据操作语言,增加删除改数据 插入数据INSERT 插入添加数据,两种方法 方式1:VALUES添加数据 #准备工作 USE atguigudb; CREATE TABLE IF NOT EXISTS emp1( id INT, name VARCHAR(15), hire_data DATE, salary DOUBLE(10,2)); SELECT * FROM emp1 INSERT INTO em…

自由学习记录(19)

unity核心也算是看完了吧,但觉得的确是少了点东西,之后再看mvc框架,和网络开发,,感觉有必要想想主次顺序了,毕竟在明年的3月之前尽量让自己更有贴合需求的能力 先了解一些相关概念,不用看懂&am…

vue计算属性

概念:基于现有的数据,计算出来新属性。并依赖数据的变化,自动重新计算 使用场景: 语法:声明在computed配置项中,一个计算属性对应一个函数,使用起来和普通属性一样使用{{计算属性名}} 代码&…

springboot2.x使用SSE方式代理或者转发其他流式接口

文章目录 1.需求描述2.代码2.1.示例controller2.2.示例service2.3.示例impl 3.测试 1.需求描述 使用SSE的方式主要还是要跟前端建立一个EventSource的链接,有了这个连接,然后往通道里写入数据流,前端自然会拿到流式数据,写啥拿啥…

Hive操作库、操作表及数据仓库的简单介绍

数据仓库和数据库 数据库和数仓区别 数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别 操作型处理(数据库),叫联机事务处理OLTP(On-Line Transaction Processing),也可以称面向用户交易的处理系统,它是针对具体业务…

Ubuntu22.04 安装图形界面以及XRDP教程

一、准备环境 1.一台服务器安装系统ubuntu(这里大部分ubuntu系统可以同用) 2.安装的ubuntu系统未安装图形界面 二、操作步骤 1.远程ssh或者直接登录服务器命令行界面 ssh -p 远程端口 rootIP 2.更新系统软件包 sudo apt update # 更新本地的软件包…

C++:多态中的虚/纯虚函数,抽象类以及虚函数表

我们在平时,旅游或者是坐高铁或火车的时候。对学生票,军人票,普通票这些概念多少都有些许耳闻。而我们上篇文章也介绍过了继承与多继承。如果这些票我们都分别的去写一个类,当然很冗余,这里我们便可以去使用继承&#…

【易售校园二手平台】开源说明(包含项目介绍、界面展示与系列文章集合)

文章目录 仓库项目介绍技术架构界面登录界面首页闲置商品发布商品详情收藏页面消息页面私聊我的查看我发布的商品 可优化点开发讲解文章集合 仓库 🏠️ 项目仓库:易售校园二手平台gitee仓库 🌍️ 在线体验:易售校园二手平台&…

python怎么将字符串转换为数字

python如何将列表中的字符串转为数字?具体方法如下: 有一个数字字符的列表: numbers [1, 5, 10, 8] 想要把每个元素转换为数字: numbers [1, 5, 10, 8] 用一个循环来解决: new_numbers []; for n in numbers:new_n…

APP 后台广告位配置的关键要素与策略

在当今数字化营销的浪潮中,APP 作为重要的信息传播渠道,其后台广告位的配置显得尤为关键。这不仅影响着广告的展示效果,还直接关系到用户体验和平台收益。 首先,了解目标受众是配置广告位的基础。通过对 APP 用户的行为数据进行分…

创建MoveIt! Package

2.1 准备URDF package 首先我们要准备一个机械臂的urdf,如果你已有URDF,可以使用自己的urdf模型。若手头没有现成的URDF,可以从此处下载一个库卡LWR简化模型URDF,这是一个固定底座7自由度的机械臂。 从该连接处依次进入examples/s…