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

2024-04-19 17:28

本文主要是介绍Docker向harbor上传大镜像的413报错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 一、背景
    • 二、问题
    • 三、处理
      • 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,结果通过

这篇关于Docker向harbor上传大镜像的413报错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918164

相关文章

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

linux配置podman阿里云容器镜像加速器详解

《linux配置podman阿里云容器镜像加速器详解》本文指导如何配置Podman使用阿里云容器镜像加速器:登录阿里云获取专属加速地址,修改Podman配置文件并移除https://前缀,最后拉取镜像... 目录1.下载podman2.获取阿里云个人容器镜像加速器地址3.更改podman配置文件4.使用po

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4