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=***
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现