【问题标题】:How to include Oracle Instant Client in airflow docker containers?如何在气流 docker 容器中包含 Oracle Instant Client?
【发布时间】:2019-05-21 16:09:02
【问题描述】:

我正在使用 puckel's airflow docker images 运行一个气流应用程序,该应用程序将从 Oracle 数据库中提取数据并将其传递到另一个数据库。我在docker-composeCeleryExecutor 中为数据库连接提供了环境变量,如下所示:

AIRFLOW_CONN_ORACLE_FLXP=oracle://oracle_user:XXXXXXXXXXXX@1.1.1.1:1521?encoding=UTF-8&nencoding=UTF-8&threaded=False&events=False&mode=sysdba&purity=new

我想在 DAG 任务中使用 OracleOperator 在 oracle 数据库中运行查询,如下所示:

t1 = OracleOperator(
    task_id='run_query',
    sql=query,
    oracle_conn_id='oracle_flxp',
    dag=dag)

但是,任务失败并出现以下错误:

{{models.py:1788}} ERROR - DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory".

我想,我可能需要在我的气流容器或单独的容器中安装 oracle 即时客户端。我已经尝试过创建this oracle instant client image并以这种方式将其添加到docker-composeCeleryExecutor中:

    oracle:
        image: oracle/instantclient:12.2.0.1
        command: sqlplus -v
    webserver:
        depends_on:
            - oracle
        ...

但错误仍然相同。此外,当我运行 docker-compose 时,oracle 容器正在初始化,但在再次退出后,打印以下行:

docker-airflow_oracle_1 exited with code 0

我实际上期望气流已经设置为连接到 oracle 数据库。有人可以帮我吗?

【问题讨论】:

    标签: oracle docker docker-compose airflow


    【解决方案1】:

    实际上,您需要构建自己的 docker 镜像来添加 oracle 数据库客户端。 3个步骤: 1.下载最新的oracle db客户端 2. 将这些文件添加到您之前的 docker 基础映像中 3. 再试一次。

    在第二步中,您将需要编写 Dockerfile 来重建。它可能喜欢关注

    来自 puckel/docker-airflow 添加 oracle-instantclient*.rpm /tmp/ ... ...

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 1970-01-01
      • 2014-10-18
      • 2019-03-11
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2018-02-23
      • 2020-12-17
      相关资源
      最近更新 更多