一、问题描述

docker镜像打包好了,准备运行。这是一个python项目,需要链接oracle数据库,用到了cx_Oracle模块,环境变量已经配置好,而且如果直接将项目复制到对应的容器中,在容器中启动pyton项目也能在外面访问的到。但是,将项目用dockerfile打包成镜像,再次启动就报错,libclntsh.so.11.1: cannot open shared object file,这个文件其实就在$ORACLE_HOME/11.2.0/lib这个文件夹下面,而且在这两个ORACLE_HOME and LD_LIBRARY_PATH环境变量中都进行了配置,还是不行。最后在stack overflow中找到了解决方案。

二、解决方案及说明

  • 解决方案:
    • 进入到etc/ld.so.conf.d/目录下
    • 新建文件oracle.conf
    • 然后将libclntsh.so.11.1所在的路径填入文件中,echo /opt/oracle/installclient/11.2.0/lib > oralce.conf
    • 执行命令ldconfig

以上就是解决方案,但是为什么,其实就是将oracle的共享仓库.../lib加入到linux的共享仓库中。让linux启动的时候能够找到。这里涉及到了动态链接库的相关设置问题,请参考下面的文章。

参考:

libclntsh.so.11.1: cannot open shared object file

Linux加载动态库的几种方法

oracle11g的链接库libclntsh.so.11.1安装在哪个目录下

https://www.cnblogs.com/minideas/p/3799474.html

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐