使用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专题