You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow1.10.9使用BigQueryToCloudStorageOperator提示httplib2缺失

解决方案

之前方法失效的原因

  • 手动进入容器安装依赖:容器重启后所有修改会直接丢失,且LocalExecutor模式下任务运行环境也需要对应依赖,仅安装webserver容器后续如果拆分调度逻辑依然会报错。
  • 直接挂载requirements.txt不生效:puckel/docker-airflow 1.10.9版本默认不会自动加载挂载的依赖清单,且如果宿主机文件权限和容器内airflow用户权限不匹配,会导致读取失败触发启动报错。

方案1:构建自定义镜像(最稳定,推荐)

该方案将依赖固化到镜像中,不会出现重启丢失、权限不匹配的问题。

  1. 在docker-compose.yml同级目录创建Dockerfile,内容如下:
FROM puckel/docker-airflow:1.10.9
# 切换root用户安装系统依赖,避免pip安装httplib2时报错
USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
    gcc \
    python3-dev \
    && rm -rf /var/lib/apt/lists/*
# 切回airflow用户安装Python依赖
USER airflow
RUN pip install --user apache-airflow[gcp]==1.10.9 httplib2>=0.18.0
  1. 执行构建命令:
    docker build -t custom-airflow:1.10.9 .
  2. 修改docker-compose.yml中webserver的image配置:
    将image: puckel/docker-airflow:1.10.9替换为image: custom-airflow:1.10.9,保持requirements.txt挂载行注释状态。
  3. 重启服务生效:
    docker-compose up -d --force-recreate

方案2:挂载requirements.txt自动安装(无需构建镜像)

适合临时调试场景,不需要修改镜像。

  1. 先修改宿主机requirements.txt的权限,匹配容器内airflow用户的uid(500):
    sudo chown 500:500 ./requirements.txt
  2. 可以在requirements.txt中补充httplib2声明,避免依赖遗漏:
apache-airflow[gcp]==1.10.9
httplib2>=0.18.0
  1. 修改docker-compose.yml的webserver配置:
  • 取消requirements.txt挂载行的注释
  • 在environment字段下添加自动安装依赖的环境变量
    修改后示例:
environment:
  - LOAD_EX=y
  - EXECUTOR=Local
  - INSTALL_REQUIREMENTS_ON_START=True
volumes:
  - ./dags:/usr/local/airflow/dags
  - ./requirements.txt:/requirements.txt
  1. 重启服务生效:
    docker-compose up -d --force-recreate

注意事项

如果后续你拆分出独立的scheduler服务,需要给scheduler也配置相同的依赖安装逻辑,否则任务运行时依然会报依赖缺失错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:03