无法使用amancevice /超集docker映像将Oracle DB用作数据源

问题描述

我正在尝试测试超集是否适合我们的数据可视化需求。由于我不了解python,因此我使用的是超集安装(v0.37.1)的docker映像,其中发布了连接到不同数据库https://github.com/amancevice/docker-superset)所需的所有库。当我尝试将新数据库源设置为Oracle数据库时,在 superset.log 中出现此错误

Unexpected error (cx_Oracle.DatabaseError) DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help
(Background on this error at: http://sqlalche.me/e/13/4xp6)

在谷歌搜索之后,我已经向容器添加了Oracle Instant Client库(当我解决了这个问题后,我将研究如何使用直接对容器执行的所有更改来创建新映像),并修改了。容器的bashrc文件(用于用户超集),以添加一个新的env变量LD_LIBRARY_PATH指向使用Oracle Instant Client的目录。 我已经重启了容器。 为了检查sqlAlchemy是否可以正确连接到我的OracleDB,我创建了 test_script.py

import sqlalchemy as sa
engine = sa.create_engine('oracle+cx_oracle://user:password@host:port/?service_name=service')
with engine.connect() as connection:
    result = connection.execute("select * from dual")
    for row in result:
        print(row)

然后,如果我直接docker exec -it my_container bash连接到容器并执行脚本python test_script.py,则会得到正确的结果并且没有错误消息,但是,连接到超集URL并尝试创建一个新的该Oracle DB的数据源,我仍然遇到相同的错误

有人知道容器中是否需要进行其他配置更改才能使这项工作生效?

解决方法

here下载Oracle Instant Client Basic或Basic Light ZIP软件包时,然后在Dockerfile中运行类似的内容:

RUN echo /opt/oracle/instantclient_19_8 > /etc/ld.so.conf.d/oic.conf && \
    ldconfig

另请参阅Linux developers和基本Oracle Instant Client的示例docker映像。如果您不在基于RPM的系统上,请在Docker for Oracle Database Applications in Node.js and Python中检出示例Docker文件。

详细信息因您使用的基本Docker映像以及是否要从ZIP文件或RPM安装Instant Client而异。