Apache Airflow+Docker部署每日爬虫失败:依赖配置求助
问题解决指南:Airflow+Docker运行爬虫脚本
一、先找错误日志定位问题
- Airflow GUI:进入对应DAG页面,点击失败的任务实例,选择「Log」标签,即可查看任务执行的详细报错信息,这是最直接的排查入口。
- Docker容器日志:若GUI日志信息不足,先通过
docker ps找到Airflow Worker容器的名称,再执行docker logs <worker容器名>,查看容器底层的运行日志,里面会包含任务执行的完整报错细节。
二、爬虫文件与路径问题
你在bash_command中使用的~/spider/path/MichiganSpider.py是本地路径,但Docker容器内的~指向容器内部用户的家目录,和本地目录完全不互通。解决方式二选一:
- 挂载本地目录到容器:在Airflow的Docker Compose配置中添加volume,将本地爬虫脚本所在目录挂载到容器内固定路径,示例:
随后修改BashOperator的命令:volumes: - ./本地爬虫脚本所在目录:/opt/airflow/spiderbash_command="python /opt/airflow/spider/MichiganSpider.py" - 移入Airflow项目目录:将爬虫脚本放到Airflow的
dags目录或专门的scripts子目录(确保容器可访问),再用容器内的相对路径调用。
三、依赖包安装与配置文件处理
1. 安装爬虫依赖
Airflow官方Docker容器默认不包含你的爬虫所需依赖,推荐两种方案:
- 自定义Airflow镜像:基于官方镜像编写Dockerfile,在镜像中预装依赖,示例:
修改Docker Compose中的镜像名为自定义镜像,重新构建并启动容器。FROM apache/airflow:2.x.x RUN pip install scrapy requests pandas # 替换为你的爬虫实际依赖包 - 容器内临时安装:若仅用于调试,可直接进入Worker容器执行
pip install <依赖包名>,但此方式在容器重启后依赖会丢失,不适合生产环境。
2. 数据库凭证配置
用环境变量替代本地配置文件更适配Docker场景:
- 在Docker Compose的
environment字段添加凭证变量:environment: - DB_USER=你的数据库用户名 - DB_PASSWORD=你的数据库密码 - DB_HOST=数据库地址 - 修改爬虫脚本,从环境变量读取凭证:
import os db_user = os.getenv("DB_USER") db_password = os.getenv("DB_PASSWORD")
四、Conda环境的使用
Airflow Docker容器默认没有Conda,要使用需自定义镜像:
- 在Dockerfile中安装Miniconda并创建目标环境:
FROM apache/airflow:2.x.x RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \ && bash miniconda.sh -b -p /opt/conda \ && rm miniconda.sh ENV PATH="/opt/conda/bin:${PATH}" RUN conda create -n spider-env python=3.9 scrapy requests -y # 替换为你的环境依赖 - 修改BashOperator命令,激活Conda环境后再运行脚本:
bash_command="source /opt/conda/bin/activate spider-env && python /opt/airflow/spider/MichiganSpider.py"
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

