Windows下Airflow通过ODBC连接MSSQL报IM002错误求助
解决Docker部署Airflow连接MSSQL的ODBC驱动问题
问题根源
本地Windows系统的Python能正常连接MSSQL,是因为你的Windows环境已经安装了MSSQL ODBC驱动并配置了相关DSN;但Airflow运行在Docker容器的Linux环境中,默认官方镜像未预装MSSQL ODBC驱动,且容器无法共享Windows本地的ODBC配置,因此抛出Data source name not found and no default driver specified错误。
解决方案:修改docker-compose.yaml并自定义Airflow镜像
需要通过自定义镜像为容器安装MSSQL ODBC驱动,同时调整数据库连接参数。
步骤1:创建自定义Dockerfile
在docker-compose.yaml同目录下创建Dockerfile,基于官方Airflow镜像添加驱动安装步骤:
FROM apache/airflow:2.9.1 USER root # 安装unixODBC依赖及MSSQL ODBC驱动 RUN apt-get update && \ apt-get install -y --no-install-recommends unixodbc unixodbc-dev curl && \ # 添加微软软件源 curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \ curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list && \ apt-get update && \ # 静默安装MSSQL ODBC驱动18版本 ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql18 USER airflow # 安装Python ODBC依赖库 RUN pip install --no-cache-dir pyodbc
步骤2:修改docker-compose.yaml
找到airflow-webserver、airflow-scheduler、airflow-worker这几个服务的image字段,替换为本地构建镜像的配置:
services: airflow-webserver: # 替换原image字段为以下内容 build: . # 保留原有其他配置(ports、volumes等)不变 airflow-scheduler: build: . # 保留原有其他配置不变 airflow-worker: build: . # 保留原有其他配置不变
步骤3:调整Airflow数据库连接参数
容器内无法使用Windows本地的DSN配置,需改用无DSN的直接连接字符串:
- 在Airflow UI的「连接」中,选择MSSQL类型,填写以下连接信息:
- 连接字符串示例:
Driver={ODBC Driver 18 for SQL Server};Server=tcp:<你的MSSQL服务器地址>,1433;Database=<数据库名>;Uid=<用户名>;Pwd=<密码>;Encrypt=yes;TrustServerCertificate=yes;Connection Timeout=30; - 或使用SQLAlchemy URI格式:
mssql+pyodbc://<用户名>:<密码>@<服务器地址>:1433/<数据库名>?driver=ODBC+Driver+18+for+SQL+Server&Encrypt=yes&TrustServerCertificate=yes
- 连接字符串示例:
步骤4:重新部署Airflow
执行以下命令重新构建镜像并启动服务:
docker-compose down docker-compose up --build -d
内容的提问来源于stack exchange,提问作者Atom
相关产品推荐
相关产品推荐

