Docker向harbor上传大镜像的413报错

embedded/2024/9/24 17:15:40/

文章目录

    • 一、背景
    • 二、问题
    • 三、处理
      • 1.调整harbor相关大小
      • 2.正向代理的nginx参数

一、背景

最近遇到了个需求,某厂商的系统模块以容器模式部署在我们的内网环境中,厂商为我们提供了一个公网仓库,需要我们自己下载相关镜像。因此,获取镜像只能通过两种方式:
1.在我们的个人设备上pull镜像,然后save镜像,拷贝到相应的机器中,最后load镜像;2.直接让生产机器出互联网,通过docker pull的方式直接获取。但对于我们来说,内网生产设备从安全策略层面无法直接对接互联网。因此,我们选择通过正向代理,让harbor仓库可以对接互联网到公网仓库中下载镜像,并统一通过harbor进行管理,这样不仅能解决镜像获取问题,同时也可以统一镜像入口,控制镜像准入,简化镜像安全策略。
具体架构如下:
在这里插入图片描述

二、问题

目前,已经顺利将所需的镜像获取下来,为了方便提供后端的server使用,需要通过docker push操作将镜像推送到仓库中:

docker tag SourceImage:TAG IP_HARBOR/REGISTRY_NAME/Image:TAG
docker push IP_HARBOR/REGISTRY_NAME/Image:TAG

在进行push的过程中,发现在推送动作执行一段时间后,报错413错误:
在这里插入图片描述

从报错信息上可以看出两点:
1.报错是nginx发起的;
2.报错意思是包体过大(厂商提供的镜像,一个有17G,虽然这看起来很不合理);
其实解决这个错误还是挺简单的,我们只需要在nginx的http域或者server域或者location域配置中加入以下配置即可:

client_max_body_size 0;

该配置表示nginx不限制包体的大小

三、处理

1.调整harbor相关大小

查看harbor有哪些组件
在这里插入图片描述

可以看到,对于harbor来说,我们不难看出除了后台的服务、数据库、缓存外,我们的入口主要就是一个nginx容器

可以看到,对于harbor来说,我们不难看出除了后台的服务、数据库、缓存外,我们的入口主要就是一个nginx容器

  1. 根据上面的分析,我们需要修改该nginx的参数
vi /apps/harbor/common/config/nginx/nginx.conf在server域增加配置:client_max_body_size 0;
client_body_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
  1. 从组件构成来看,harbor-portal也是一个nginx组成的,那么我们也可以将该nginx的参数进行修改:
vi /apps/harbor/common/config/portal/nginx.conf在server域增加配置:client_max_body_size 0;
client_body_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;

2.正向代理的nginx参数

这一点是之前一直忽略的点,也是很难想到的点,我们将harbor自身组件的限制取消后,发现push镜像还是一直有413的问题,这个问题排查了很久,后来也是突然想到的。由于我们的harbor是在容器层面配置了正向代理,在进行push的时候,我们从正向代理的日志中发现即使本机配置,上传过程中也会过正向代理。因此,我们将正向代理的参数也进行修改:

在http域中添加参数:client_max_body_size 0;

修改完成,重新reload相关nginx后,重新push,结果通过


http://www.ppmy.cn/embedded/3507.html

相关文章

28、Lua 如何输出树状结构的table?

为了让游戏前端数据输出更加条理,做了一个简单树状结构来打印数据。 ccmlog.lua local function __tostring(value, indent, vmap)local str indent indent or vmap vmap or {}--递归结束条件if (type(value) ~ table) thenif (type(value) string) then--字符…

Vue 3 中 Props 传值的完整指南

一、定义 Props 类型 首先,我们需要定义一个接口来描述我们的props类型。这通常在一个专门的类型声明文件中完成,例如types/index.ts: // types/index.ts export interface Parent {id: number;title: string; } export type ParentArray …

ASP.NET基于BS结构的实验室预约模型系统

摘 要 《基于B/S结构的实验室预约模型系统》是采用ASP.NET开发的一个开放实验室预约系统。本系统是针对目前实验室手工管理效率低下,缺乏安全性、可控性等缺点,以校园网为依托,采用科学、高效的教学管理方式,使学校的教学资源得…

设计模式(022)行为型之解释器模式

解释器模式是一种行为型设计模式,用于定义一种语言的文法,并且在该语言中解释句子的意义。这种模式通常用于实现编程语言解释器、正则表达式引擎等场景。 在解释器模式中,主要有以下几个角色:① 抽象表达式(AbstractEx…

JWT原理

为什么会有JWT的出现? 首先不得不提到一个知识叫做跨域身份验证,JWT的出现就是为了更好的解决这个问题,但是在没有JWT的时候,我们一般怎么做呢?一般使用Cookie和Session,流程大体如下所示: 用…

RabbitMQ入门实战

文章目录 RabbitMQ入门实战基本概念安装快速入门单向发送多消费者 RabbitMQ入门实战 官方:https://www.rabbitmq.com 基本概念 AMQP协议:https://www.rabbitmq.com/tutorials/amqp-concepts.html 定义:高级信息队列协议(Advanc…

Oracle-操作【Python-cx_oracle】

一、cx_oracle 1 简介 通过Python扩展模块cx_Oracle访问Oracle数据库cx_Oracle通常使用 pip 安装Oracle 客户端库需要单独安装 2 特点 支持多个 Oracle 客户端和数据库版本执行 SQL 和 PL/SQL 语句广泛的 Oracle 数据类型支持,包括大型对象(CLOB 和 …

【蓝桥杯】2024年第15届真题题目

试题 A: 握手问题 本题总分: 5 分 【问题描述】 小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上, 大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进 行一次握手(且仅有一次&a…