记一次,由于发布配置引发的alpine中运行sqlite3的错误解决历程思路!

news2024/12/29 11:03:56

使用net的都知道,打包镜像的时候的基础包有2个选择(实际上更多)
比如我们使用aspnet6.0作为基础包,则有2个选择
mcr.microsoft.com/dotnet/aspnet:6.0 212MB (basic)
mcr.microsoft.com/dotnet/aspnet:6.0-alpine 104MB (alpine)
在这里插入图片描述

问题回顾

目前的PasteSpider的打包是基于aspnet 6.0的,因为数据库的支持是pgsql,mysql,sqlite!
在其他的没有变更的时候,数据库选择sqlite基础包切换到alpine的时候,部署到服务器后发现运行失败!
错误的信息大致就是lib-sqlite3.0.os找不到!!! 那个文件命名就躺在那啊!!!
(打包镜像后运行在阿里云的centos7的docker中)
在这里插入图片描述

步骤一

既然报错了,又是切换到alpine的时候才触发的,在其他东西都不变动的时候,切换回basic的时候,项目是可以运行的!这个叫错误重现!!!
所以第一反应就是basic和alpine的区别,对吧!!!
但是basic和alpine的包的大小差别实在是太大了,看上面212MB—104MB!!!
好死不死的是,我搜索了下sqlite3 alpine找到国外的,说法也是切换回basic解决!!!
所以就更加确定了自己的思路了,巨坑!!!
所以就找找能否找到这个问题的解决方案
直接的思维肯定是居然没有sqlite的对应的文件,也就是没有运行环境啥的,那就安装!

步骤二

找了一大堆,大概思路就是安装
apk add sqlite
apk add sqlite3
apk add libssqlite
apk add sqlite-libs
apk add sqlite-dev
… … .
由于容器运行后,如果异常(停止)是无法再次进入容器查看文件的,所以只能修改Dockerfile的文件,然后就是docker build … … . docker run的去测试!
还好的是我使用了PasteSpider的部署工具,只要修改Dockerfile然后保存,点击“构建升级”,就可以等待反馈结果了!

很明显的,以上的动作肯定都失败了!
其实系统要的只是一个合适的libe_sqlite3.so文件而已!!!
折腾了老半天,一样的问题,自己也有点乱了!
关键sqlite这个东西嘛,你说他大众吧,其实他也有非常多版本的,不信你apk search sqlite
你会发觉有一大堆,大概就是和语言等都有关,不同语言有不一样的版本!!!

步骤三

折腾一圈也不行后,不得不返回错误下信息一行一行的看,发现了一行代码我前面一直忽略的!
在这里插入图片描述
就这一行,他并没有报文件找不到,是报告了其他的错误!!!
也就是说xxxsqlite3.so的找不到,不一定是对的,是这个文件不对劲!!!
看上2行还有一个关键信息!

在这里插入图片描述
对啊!
还有一个runtime的玩意,为了减少打包的大小我一般都是直接选择linux-x64的!!!
然后上面发现一行关键代码
/app/runtimes/linux-musl-x64/native/libe_sqlite3.so
啥????
咋不是linux-x64????
** linux-musl-x64(使用 musl 的轻量级发行版,如 Alpine Linux)**
以前一直都没留意这个runtime的问题,因为之前都是直接linux-x64放到服务器上可以运行!!!

步骤四

既然发现问题后,那就立马修改下打包的配置
在这里插入图片描述
由于找不到linux-musl-x64
我估计这个自己修改代码是可以支持的,那就先选择“可移植”
保存
发布
在这里插入图片描述
一键发布后,等了一会,终于收到了成功的反馈信息!

在这里插入图片描述

收获一

遇到错误的时候,请仔细阅读,尽量避免随便看看,自以为的提取了些“重点信息”,我就是被
libe_sqlite3: No such file or directory给误导了!
忽略了关键信息
Error relocating /app/libe_sqlite3.so: fcntl64: symbol not found

Error loading shared library /app/runtimes/linux-musl-x64/native/libe_sqlite3.so: No such file or directory
然后又好死不死的在github中找到了关于sqlite3在alpine运行的问题,那个帖子我记得是netcore3.1的
就被他引导回使用basic的包了,这不又把问题扯回原点了!
还好自己开发PasteSpider的思路就是要尽量减少资源的占用,不仅包括内存占用,也包括大家下载镜像包的大小!

收获二

谨慎对待发布的配置项中的运行时!!!如果你只是自己用,请先确认你的运行环境!
这里有一个问题(basic的linux-x64咋就可以用了???被.net自带框架补全了???)
如果包不是差别大,最好还是选择多个环境!

那么问题来了,怎么知道你当前服务器是什么环境?
在这里插入图片描述
今天分享到此!
如果你要使用PasteSpider作为部署工具,你可以查看我的PasteSpider专题

PasteSpider专栏点击访问

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

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

相关文章

小红书种草怎么做?

文末领取小红书电商开店运营教程! 在如今的社交电商时代,小红书作为国内最大的生活分享社区,已成为了许多人找寻新品、新店、新玩法的必选平台。 小红书上的“种草”文化也日渐盛行,它不仅仅是一个购物指南,更是一种…

Python3极简教程(一小时学完)下

目录 PEP8 代码风格指南 知识点 介绍 愚蠢的一致性就像没脑子的妖怪 代码排版 缩进 制表符还是空格 每行最大长度 空行 源文件编码 导入包 字符串引号 表达式和语句中的空格 不能忍受的情况 其他建议 注释 块注释 行内注释 文档字符串 版本注记 命名约定 …

索引结构与检索原理

一、mysql索引结构 1.BTree索引 [检索原理] 左边列的表格(真实数据),右边对应一棵树,树的管度越来越管查询越快。 以下图表的名称为:段区块 硬盘都是长方形的,打了一个封装,里面是一个圆圈…

游戏热更新——AssetBundle

AssetBundle AssetBundle的定义与使用 AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至是整个场景,可以在游戏运行的时候被加载 AssetBundle自身保存着相互的依赖关系 压缩包可以使用LZMA和LZ4压缩算法,减少包大小,更快的进行网…

栈(Stack)and leetcode刷题

栈(Stack)and leetcode刷题 1. 栈(Stack)的概念2. 栈(Stack)的实现2.1 用数组实现2.2 用链表实现2.2.1 用单链表实现 3. leetcode刷题3.1 括号匹配问题3.2 栈的弹出压入序列3.3 逆波兰表达式求值中缀表达式…

Cartographer重入门到精通(二):运行作者demo及自己的数据集

在demo数据包上运行cartographer 现在Cartographer和Cartographer的Ros包已经都安装好了,你可以下载官方的数据集到指定的目录(比如在Deutsches Museum用背包采集的2D和3D 数据),然后使用roslauch来启动demo。 注:la…

一文了解5G新通话技术演进与业务模型

5G新通话简介 5G新通话,也被称为VoNR,是基于R16及后续协议产生的一种增强型语音通话业务。 它在IMS网络里新增数据通道(Data Channel),承载通话时的文本、图片、涂鸦、菜单等信息。它能在传统话音业务基础上提供更多服…

拓扑排序——AcWing 164. 可达性统计

目录 拓扑排序 定义 运用情况 注意事项 解题思路 AcWing 164. 可达性统计 题目描述 运行代码 代码思路 改进思路 拓扑排序 定义 拓扑排序(Topological Sort)是对有向无环图(Directed Acyclic Graph,简称DAG&#xff…

【论文阅读笔记】ASPS: Augmented Segment Anything Model for Polyp Segmentation

1.论文介绍 ASPS: Augmented Segment Anything Model for Polyp Segmentation ASPS:用于息肉分割的扩展SAM模型 2024年 arxiv Paper Code 2.摘要 息肉分割在结直肠癌诊断中起着至关重要的作用。最近,Segment Anything Model(SAM)的出现利用其在大规模…

去水印小程序源码修复版-前端后端内置接口+第三方接口

去水印小程序源码,前端后端,内置接口第三方接口, 修复数据库账号密码错误问题,内置接口支持替换第三方接口, 文件挺全的,可以添加流量主代码,搭建需要准备一台服务器,备案域名和http…

【JVM实战篇】内存调优:内存问题诊断+案例实战

文章目录 诊断内存快照在内存溢出时生成内存快照MAT分析内存快照MAT内存泄漏检测的原理支配树介绍如何在不内存溢出情况下生成堆内存快照?MAT查看支配树MAT如何根据支配树发现内存泄漏 运行程序的内存快照导出和分析快照**大文件的处理** 案例实战案例1:…

交换机和路由器的工作流程

1、交换机工作流程: 将接口中的电流识别为二进制,并转换成数据帧,交换机会记录学习该数据帧的源MAC地址,并将其端口关联起来记录在MAC地址表中。然后查看MAC地址表来查找目标MAC地址,会有一下一些情况: MA…

java.sql.SQLException: Before start of result set

情况描述,在通过JDBC连接数据库时,想直接判断获取的值是否存在,运行时报错。 翻译: 在开始结果集之前 报错截图 解决问题的方法:对结果集ResultSet进行操作之前,一定要先用ResultSet.next()将指针移动至…

4K60无缝一体矩阵 HDMI2.0功能介绍

关于GF-HDMI0808S 4K60无缝一体矩阵的功能介绍,由于直接针对GF-HDMI0808S型号的具体信息较少,我将结合类似4K60无缝HDMI矩阵的一般功能特性和可能的GF-HDMI0808系列产品的特点来进行说明。请注意,以下信息可能不完全针对GF-HDMI0808S型号&…

vienna整流器的矢量分析

Vienna整流器使用六个二极管和六个IGBT(或MOSFET)组成,提供三个电平:正极电平(P)、中性点电平(O)和负极电平(N)。通过对功率管的控制,Vienna整流器…

xmind梳理测试点,根据这些测试点去写测试用例

基本流(冒烟用例必写) 备选流 公共测试点:

算法笔记——LCR

一.LCR 152. 验证二叉搜索树的后序遍历序列 题目描述: 给你一个二叉搜索树的后续遍历序列,让你判断该序列是否合法。 解题思路: 根据二叉搜索树的特性,二叉树搜索的每一个结点,大于左子树,小于右子树。…

【企业级监控】Zabbix实现邮箱报警

Zabbix监控自动化 文章目录 Zabbix监控自动化资源列表基础环境前言四、Zabbix邮件告警4.1、实现报警所需的条件4.1.1、告警媒介4.1.2、触发器(trigger)4.1.3、动作(action) 4.2、配置告警媒介4.2.1、设置告警媒介参数4.2.2、启用此…

SpringCloud教程 | 第八篇: 使用seata处理分布式事务

1、参考程序员江小北 2、打算降低nacos版本,先学通再看看升级到高版本nacos能不能正常使用。 3、nacos用1.4.1,正常启动单机版的了 4、seata用2.0.0 我看江小北说用的1.4.0的seata,但是图片中的目录文件都找不到,倒是在2.0.0的…

弥合人类与人工智能的知识差距:AlphaZero 中的概念发现和迁移(1)

文章目录 一、摘要二、简介三、相关工作3.1 基于概念的解释3.2 强化学习中生成解释3.3 国际象棋与人工智能 四、什么是概念?五、发掘概念5.1 挖掘概念向量5.1.1 静态概念的概念约束5.1.2 动态概念的概念约束 5.2 过滤概念 一、摘要 人工智能(AI&#xff…