如何在气流docker容器中包含Oracle Instant Client?

时间:2019-05-21 16:09:03

标签: oracle docker docker-compose airflow

我正在使用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

我想使用像这样的OracleOperator在DAG任务中的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 Instant Client。我已经尝试过创建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数据库设置了气流。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

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

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

从Puckel / docker-airflow 添加oracle-instantclient * .rpm / tmp / ... ...