You need to enable JavaScript to run this app. Docker部署apache/airflow:2.1.0从SQL Server取数报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署apache/airflow:2.1.0从SQL Server取数报错如何解决

问题排查与解决步骤

本次报错截图如下:
Airflow Web UI报错
已安装的provider列表:
已安装provider列表
原有连接配置:
Airflow数据库连接配置


1. 修正DAG代码中Hook的错误调用

你当前extract函数里的Hook初始化写法错误,MsSqlHook.get_connection返回的是Airflow的Connection对象,不能直接调用get_hook()获取MSSQL的Hook实例,正确写法如下:

def extract(**kwargs):
    # 直接实例化MsSqlHook,传入配置的连接ID即可
    hook = MsSqlHook(mssql_conn_id="sqlconnection_reader")
    df = hook.get_pandas_df(sql="SELECT top 5 * FROM [dbo].[1_del_ListPO]")
    print(df)

2. 检查MSSQL相关依赖是否完整

官方apache/airflow基础镜像默认没有预装MSSQL的访问依赖和系统驱动,即使安装了apache-airflow-providers-microsoft-mssql provider,也需要额外安装以下依赖:

系统级依赖

  • freetds-dev(pymssql依赖的底层库)
  • unixodbc-dev(ODBC驱动依赖)
  • Microsoft ODBC Driver for SQL Server(ODBC访问MSSQL必需的驱动)

Python依赖

  • pymssql / pyodbc(二选一即可,pymssql更轻量)

如果是Docker部署,需要基于官方镜像构建自定义镜像,参考Dockerfile如下:

FROM apache/airflow:2.1.0
USER root
# 安装系统依赖和ODBC驱动
RUN apt-get update && apt-get install -y --no-install-recommends \
    freetds-dev \
    unixodbc-dev \
    curl \
    && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
    && curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
    && apt-get update \
    && ACCEPT_EULA=Y apt-get install -y msodbcsql17 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
USER airflow
# 安装Python依赖
RUN pip install --no-cache-dir pymssql pyodbc

3. 校验Airflow连接配置

确认以下配置项正确:

  • 连接类型:必须选择Microsoft SQL Server,不能选其他通用数据库类型
  • Host:填写MSSQL数据库的可访问地址,注意如果是Docker部署,不要填localhost(会指向Airflow容器本身),要填宿主机IP或者数据库所在服务器的可访问IP
  • Schema:填写要访问的数据库名称
  • Login:数据库登录用户名
  • Password:数据库登录密码
  • Port:MSSQL默认端口为1433,未修改端口的情况下填1433即可
  • Extra:如果使用ODBC驱动访问,需要填入{"driver": "ODBC Driver 17 for SQL Server"},使用pymssql可以留空

配置完成后先进入Airflow的scheduler/worker容器,测试网络连通性:

# 进入容器命令示例,替换为你的scheduler容器名
docker exec -it airflow-scheduler bash
# 测试端口连通性
telnet <你的MSSQL地址> 1433

4. 本地验证Hook可用性

进入Airflow容器后,执行Python命令手动测试Hook是否正常工作:

from airflow.providers.microsoft.mssql.hooks.mssql import MsSqlHook
hook = MsSqlHook(mssql_conn_id="sqlconnection_reader")
res = hook.get_first("SELECT @@VERSION")
print(res)

如果能正常返回MSSQL的版本信息,说明依赖、配置、网络都正常,再运行DAG即可。


内容的提问来源于stack exchange,提问作者Woody Ngo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 18:24:07