Azure Pipelines中cx_Oracle连接Oracle遇DPI-1047错误求助
解决cx_Oracle连接Oracle时的DPI-1047错误
你遇到的DPI-1047错误,核心原因是系统找不到libclntsh.so文件——虽然你安装了Oracle Instant Client,但包里只有带版本号的libclntsh.so.21.1,没有cx_Oracle需要的通用软链接,同时可能存在运行时库路径未正确配置的问题。
以下是修复后的完整Dockerfile及调整说明:
修改后的Dockerfile
FROM python:3.9-slim-buster # 合并安装依赖,清理apt缓存减小镜像体积 RUN apt-get update && apt-get install -y git telnet gcc wget unzip libaio1 && rm -rf /var/lib/apt/lists/* # 下载并解压Oracle Instant Client RUN wget https://download.oracle.com/otn_software/linux/instantclient/215000/instantclient-basic-linux.x64-21.5.0.0.0dbru.zip RUN unzip instantclient-basic-linux.x64-21.5.0.0.0dbru.zip && \ # 创建libclntsh.so软链接,匹配cx_Oracle的查找要求 ln -s /instantclient_21_5/libclntsh.so.21.1 /instantclient_21_5/libclntsh.so && \ # 配置系统库路径并刷新 sh -c "echo /instantclient_21_5 > /etc/ld.so.conf.d/oracle-instantclient.conf" && \ ldconfig # 清理临时文件和不需要的工具 RUN apt-get purge -y unzip && rm instantclient-basic-linux.x64-21.5.0.0.0dbru.zip # 设置运行时库路径环境变量,确保进程能加载到Oracle库 ENV LD_LIBRARY_PATH=/instantclient_21_5:$LD_LIBRARY_PATH CMD ["/bin/sh"]
关键调整点
- 创建软链接:手动将带版本号的
libclntsh.so.21.1链接为libclntsh.so,满足cx_Oracle的文件查找规则。 - 设置LD_LIBRARY_PATH:明确指定运行时库路径,避免部分场景下ldconfig配置未生效的问题。
- 优化镜像构建:合并安装命令、清理apt缓存,减少镜像层数和体积。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

