python-3.x - docker 运行错误:DPI-1047:找不到 64 位 Oracle 客户端库
问题描述
我正在尝试使用 Oracle 数据库连接对一个非常简单的 python 应用程序进行 dockerize 并在 Docker 上执行它。这个应用程序在我的本地机器上运行良好。
我成功地构建了这个应用程序,但是在 Docker 上执行它时出错。
Docker文件:
FROM python:3
ADD File.py /
RUN pip install cx_Oracle
RUN pip install pandas
RUN pip install openpyxl
CMD [ "python", "./File.py" ]
文件.py:
import cx_Oracle
import pandas as pd
#creating database connection
dsn_tns = cx_Oracle.makedsn('dev-tr01.com', '1222', service_name='ast041.com')
conn = cx_Oracle.connect(user=r'usr', password='3451', dsn=dsn_tns)
c = conn.cursor()
query ='SELECT * FROM Employee WHERE ROWNUM <10'
result = pd.read_sql(query, con=conn)
result.to_excel("batchtable.xlsx")
conn.close()
错误:
泊坞窗运行 python_batchdriver:最新
cx_Oracle.DatabaseError:DPI-1047:找不到 64 位 Oracle 客户端库:“libclntsh.so:无法打开共享对象文件:没有这样的文件或目录”。请参阅https://oracle.github.io/odpi/doc/installation.html#linux获取帮助
解决方案
对于 cx_Oracle,您还需要安装 Oracle Instant Client 库。请参阅cx_Oracle 安装说明。
有多种方法可以在 Docker 中自动安装。一个例子是:
RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip && \
unzip instantclient-basiclite-linuxx64.zip && \
rm -f instantclient-basiclite-linuxx64.zip && \
cd instantclient* && \
rm -f *jdbc* *occi* *mysql* *jar uidrvci genezi adrci && \
echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && \
ldconfig
您还需要 libaio 或 libaio1 包。
请参阅Docker for Oracle Database Applications in Node.js 和 Python。
另请参阅将 Oracle Instant 客户端安装到 Python 的 Docker 容器中 cx_Oracle 请注意,如果您使用的不是基于 Debian 的 Linux 发行版,这些步骤可能会有所不同。
推荐阅读
- qt - 配置 Qt5 以从源代码编译时出错
- flutter - Flutter Tabbarview 下划线颜色
- javascript - 滚动和窗口加载或调整大小时导航栏更改
- windows - 如何在 Windows 10 下的 Anaconda 中安装 PyGObject?
- cakephp-3.0 - 在 CakePHP3.6 中,如何将另一个控制器的函数调用到另一个控制器中?
- javascript - 自定义“import”与 webpack 的工作方式
- math - 在非线性尺度上映射点
- angular - 如何在使用 CLI 创建的 Angular 库中包含第三方模块
- jquery-mobile - jQueryMobile+PhoneGap+iOS 11:阻止尝试使用 history.replaceState() 更改会话历史 URL
- c# - 为什么我不能从此 DataRow 中获得 Byte[]?