Airflow容器依赖安装失败:如何通过Docker部署安装requirements.txt
解决Airflow Docker容器中依赖包安装失败的问题
看起来你的问题核心出在Docker构建时无法正确获取requirements.txt文件,以及可能的目录挂载配置缺失,导致依赖没安装、脚本无法被DAG访问。我来一步步帮你修复:
1. 修正Dockerfile的路径问题
你的requirements.txt在项目根目录的scripts/文件夹下,而Dockerfile在deployment/目录里——这意味着构建镜像时,默认的上下文是deployment/,直接写COPY requirements.txt会找不到文件。另外,puckel/docker-airflow:1.10.9的默认工作目录是/usr/local/airflow,不需要手动改成/airflow。
修改后的Dockerfile:
FROM puckel/docker-airflow:1.10.9 # 从项目根目录复制requirements.txt到Airflow容器的工作目录 COPY ../scripts/requirements.txt /usr/local/airflow/ # 更新pip并安装依赖 RUN pip install --upgrade pip && pip install -r requirements.txt
2. 调整docker-compose的构建上下文
为了让Docker能访问到项目根目录下的scripts/和airflow/文件夹,需要把构建上下文设置为项目根目录,同时指定Dockerfile的路径。另外,别忘了挂载dags和scripts目录,这样容器内的Airflow才能访问到你的DAG文件和脚本:
修改后的docker-compose.yml:
version: '3' services: webserver: build: context: ../ # 构建上下文设为项目根目录 dockerfile: deployment/Dockerfile # 指定Dockerfile的相对路径 volumes: - ../airflow/dags:/usr/local/airflow/dags # 挂载DAG目录 - ../scripts:/usr/local/airflow/scripts # 挂载脚本目录,让test.py能调用里面的函数 ports: - "8080:8080" # 按需暴露端口 command: webserver
3. 验证依赖是否安装成功
如果还是不确定依赖是否安装,可以在Dockerfile里添加一行调试命令,查看文件是否被正确复制:
# 在COPY之后添加 RUN ls -l /usr/local/airflow/requirements.txt
构建镜像时如果能看到这个文件的输出,说明复制成功;如果报错,检查路径是否正确。
另外,你也可以进入运行中的容器,执行pip list查看boto3是否存在:
# 查找容器ID docker ps # 进入容器 docker exec -it <container-id> bash # 查看已安装包 pip list | grep boto3
为什么之前的配置失败?
- 你的Dockerfile里
COPY requirements.txt /airflow,但构建上下文是deployment/,这个目录下没有requirements.txt,导致COPY命令实际没有复制到文件,pip install自然跳过了依赖安装。 - 没有挂载
scripts目录到容器,即使依赖安装成功,test.py也无法找到scripts里的函数(不过你的报错是模块找不到,所以主要还是依赖问题)。
内容的提问来源于stack exchange,提问作者Oliver Robie
相关产品推荐
相关产品推荐

