Apache Airflow 3.0.6 Oracle连接配置异常排查求助
解决Airflow 3.0.6 Docker环境中Oracle连接的两个问题
问题描述
- 在DAG文件中执行
from airflow.providers.oracle.hooks.oracle import OracleHook时,触发ModuleNotFoundError: No module named 'airflow.providers.oracle'错误 - Airflow后台Admin->Connections->Add Connections页面中,找不到Oracle连接类型选项
配置问题排查
从提供的配置文件中,发现三个核心问题:
- 依赖重复安装:Dockerfile中先单独用pip安装了Oracle provider等包,之后又通过requirements.txt重复安装相同依赖,容易导致安装冲突或失败
- Oracle Provider版本不兼容:使用的
apache-airflow-providers-oracle==4.2.0不支持Airflow 3.0.x版本,版本匹配错误 - 缺少Oracle客户端依赖:cx_Oracle需要Oracle Instant Client才能正常工作,Dockerfile中未安装该组件
修复步骤
1. 修正Dockerfile,添加Oracle客户端依赖并简化安装逻辑
更新后的Dockerfile如下:
FROM apache/airflow:3.0.6 USER root # Install Java and build tools ENV DEBIAN_FRONTEND=noninteractive # Update apt and install required packages RUN apt-get update --allow-releaseinfo-change && \ apt-get install -y \ default-jdk \ build-essential \ python3-dev \ wget \ curl \ unzip \ libaio1 \ # Oracle客户端依赖库 && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 安装Oracle Instant Client(cx_Oracle运行必需) RUN wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip && \ unzip instantclient-basiclite-linuxx64.zip && \ mkdir -p /opt/oracle && \ mv instantclient_* /opt/oracle/instantclient && \ rm instantclient-basiclite-linuxx64.zip && \ echo "/opt/oracle/instantclient" > /etc/ld.so.conf.d/oracle-instantclient.conf && \ ldconfig # Fix ownership for Airflow directories RUN mkdir -p /opt/airflow/plugins /opt/airflow/config \ && chown -R airflow:root /opt/airflow/dags /opt/airflow/plugins /opt/airflow/logs /opt/airflow/config USER airflow # 统一通过requirements.txt安装所有依赖,避免重复 COPY requirements.txt /requirements.txt RUN pip install --no-cache-dir --trusted-host pypi.org --trusted-host files.pythonhosted.org -r /requirements.txt
2. 更新requirements.txt中的Oracle Provider版本
将Oracle相关依赖更新为适配Airflow 3.0.6的版本:
# Oracle apache-airflow-providers-oracle==5.1.0 # 兼容Airflow 3.0.x的最低版本 cx_Oracle==8.3.0 # Oracle DB driver
3. 重新构建镜像并重启服务
执行以下命令完成部署:
# 停止当前运行的Airflow服务 docker-compose down # 重新构建自定义镜像 docker-compose build # 启动更新后的服务 docker-compose up -d
4. 验证修复结果
- 进入任意Airflow服务容器(如airflow-worker),执行
pip list | grep airflow-providers-oracle,确认版本为5.1.0 - 测试DAG中的OracleHook导入语句,确认不再报错
- 刷新Airflow后台的连接添加页面,确认Oracle连接类型已出现
内容的提问来源于stack exchange,提问作者Enamul Haque
相关产品推荐
相关产品推荐

