Docker部署Airflow 2.5.1时出现gspread模块缺失错误
问题根源
你在Windows本地用pip install gspread安装的包是在宿主机的Python环境里,但Airflow运行在Docker容器内部,宿主机和容器的Python环境完全隔离,所以容器里根本找不到这个依赖包。
解决方法
方法1:通过docker-compose环境变量自动安装(最简单)
修改你的docker-compose.yaml,利用内置的_PIP_ADDITIONAL_REQUIREMENTS变量,让容器启动时自动安装需要的包(注意你的代码还用到了df2gspread,也要一起安装):
- 找到
x-airflow-common下的environment块,修改_PIP_ADDITIONAL_REQUIREMENTS配置:_PIP_ADDITIONAL_REQUIREMENTS: gspread df2gspread - 重启所有容器:
docker-compose down -v docker-compose up -d
容器启动时会自动执行pip install gspread df2gspread,安装完成后DAG的导入错误就会消失。
方法2:构建自定义Airflow镜像(更稳定,适合长期使用)
如果需要固定依赖版本或添加更多自定义配置,推荐构建自己的镜像:
- 在
docker-compose.yaml同目录下新建Dockerfile:FROM apache/airflow:2.5.1 RUN pip install --no-cache-dir gspread df2gspread - 修改
docker-compose.yaml里的x-airflow-common块,替换镜像来源为本地构建:# image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.5.1} build: . - 构建镜像并重启容器:
docker-compose build docker-compose down -v docker-compose up -d
方法3:临时进入容器安装(仅测试用,重启后失效)
如果只是临时测试,可以直接进入容器手动安装,但容器重启后包会丢失:
# 给调度器安装依赖 docker-compose exec airflow-scheduler pip install gspread df2gspread # 给工作节点安装依赖 docker-compose exec airflow-worker pip install gspread df2gspread # 给webserver安装(如果需要在web端解析DAG) docker-compose exec airflow-webserver pip install gspread df2gspread
额外提示
你的DAG里用datetime.now()作为start_date会导致每次解析DAG都认为是新的起始时间,建议改成固定日期,比如和default_args里一致的datetime(2023, 1, 1)。
内容的提问来源于stack exchange,提问作者camila
相关产品推荐
相关产品推荐

