You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Airflow厚模式连接Oracle 19C失败,求助解决DPI-1047错误

解决Airflow厚模式连接Oracle 19C的DPI-1047错误及容器问题

问题根源

DPI-1047错误是因为Airflow容器内未安装Oracle Instant Client库,单独构建的Oracle客户端容器未被Airflow容器调用,无法提供所需的连接依赖。


解决方案

1. 构建整合Oracle客户端的Airflow自定义镜像

不要单独维护Oracle客户端镜像,直接将Oracle Instant Client整合到Airflow镜像中:

  • 先手动下载Oracle Instant Client 19c的basic rpm包(对应Oracle Linux 8版本),放到Dockerfile同目录下。
  • 创建如下Dockerfile:
FROM apache/airflow:2.7.2

# 安装Oracle客户端依赖的系统库
RUN yum install -y libaio && \
    yum clean all

# 复制并安装本地的Oracle Instant Client rpm
COPY oracle-instantclient-basic-19.20.0.0.0-1.el8.x86_64.rpm /tmp/
RUN rpm -ivh /tmp/oracle-instantclient-basic-19.20.0.0.0-1.el8.x86_64.rpm && \
    rm -f /tmp/oracle-instantclient-basic-19.20.0.0.0-1.el8.x86_64.rpm

# 设置Oracle环境变量,确保Airflow能找到客户端库
ENV LD_LIBRARY_PATH=/usr/lib/oracle/19.20/client64/lib:$LD_LIBRARY_PATH
ENV ORACLE_HOME=/usr/lib/oracle/19.20/client64

# 安装所需的Airflow providers
RUN pip install --no-cache-dir apache-airflow-providers-oracle==3.7.4
RUN pip install --no-cache-dir apache-airflow-providers-postgres==5.6.1
  • 构建镜像:
docker build . --tag airflow-oracle:2.7.2

2. 修改docker-compose.yaml使用自定义镜像

打开下载的docker-compose.yaml,将所有服务(webserver、scheduler、worker、triggerer等)的image字段从apache/airflow:2.7.2替换为自定义镜像airflow-oracle:2.7.2,无需保留单独的Oracle客户端容器配置。

3. 重新初始化并启动Airflow

  • 清理旧的容器和数据:
docker compose down -v
  • 初始化Airflow:
docker compose up airflow-init
  • 启动Airflow服务:
docker compose up -d

4. 验证连接

在Airflow UI中创建Oracle连接并测试。若仍有问题,进入Airflow worker容器检查库文件:

docker exec -it <你的airflow-worker容器ID> ls /usr/lib/oracle/19.20/client64/lib/

确认libclntsh.so存在即可。

5. Astro启动问题修复

修改Astro的Dockerfile为上述整合Oracle客户端的配置,重新构建镜像后再启动Astro服务。


内容的提问来源于stack exchange,提问作者Ramkumar.S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:04:58