Docker缺少libnsl动态库

1:为了和客户docker环境保持一直要使用基础镜像:openjdk:8-jdk-oraclelinux8

这个版本号是个tag,tag用docker list是查不到的,可以直接docker pull到本地,Dockerfile里直接From使用。

2:为了和客户的版本号保持一直还要升级最新的Docker版本,我用之前的版本打出来的镜像只能使用-v参数进行目录映射而且需要加--privileged=true,不然镜像里的项目占位符无法解析。

3:使用的上面的基础镜像有一个问题,如果项目依赖libnsl.so.1函数库会报错,这个问题折磨了我好久,上网搜了很多方法,在Dockerfile中以各种姿势下载这个libnsl打镜像都不成功。

    最后没法子问了客户的运维,还是专业的人有见解,一下子给我解决了。就是在Dockerfile中添加:

RUN microdnf install -y libnsl

    这样打镜像的时候会自动下载这个动态库,启动镜像的时候还报错了一个错误:

terminate called after throwing an instance of 'std::runtime_error'
 
what(): locale::facet::_S_create_c_locale name not valid

 

 可能是语言包支持的问题,在启动脚本里加上:

export LC_ALL="C"

 

 解决问题。

虽然简简单单写了几句,但是上面三个问题花了我两天的时间来搞,哎还是要继续努力呀。关于Docker升级上传的文档参考。

对了对于os的动态库,可以使用ldd  file查看这个函数库依赖了那些函数库,如果缺少的话结果会显示not found,我的环境是如下的情况。

 

然后就是动态库加载的路径可以通过下面的参数进行设置。上面的Indigo目录就是自定义设置的。

export LD_LIBRARY_PATH=***

 

posted @ 2021-03-05 00:33  蒙恬括  阅读(1156)  评论(0编辑  收藏  举报