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

使用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专栏点击访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值