无法使用 amancevice/superset docker 图像来使用 Oracle DB 作为数据源

Unable to use amancevice/superset docker image to use Oracle DB as datasource

我正在尝试测试超集是否足以满足我们的数据可视化需求。由于我不了解 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 文件(对于用户超集)添加一个新的环境变量 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 数据库创建一个新的数据源,我仍然遇到同样的错误。

有人知道容器中是否需要进行其他配置更改才能使其正常工作吗?

当您从 here 下载 Oracle Instant Client Basic 或 Basic Light ZIP 包时,然后 运行 在您的 Docker 文件中有这样的内容:

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

另请参阅 Linux developers and for basic Oracle Instant Client. If you are not on an RPM based system, check out the sample Docker files in Docker for Oracle Database Applications in Node.js and Python 的示例 docker 图片。

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

更新:Oracle GitHub Container Registry.

提供了预构建的容器