Docker部署puckel版Airflow 已装Google依赖仍报缺少google模块错误
Airflow 容器报错"No module named 'google'"修复方案
触发问题的核心根因
- 构建参数被覆盖失效:执行
docker build时重复传递同名--build-arg参数,Docker规则为同名参数仅最后一次传递的值生效,前面传入的httplib2==0.18.1依赖会被后续传入的apache-airflow-providers-google==2.2.0完全覆盖,实际安装时第一个PYTHON_DEPS参数的内容根本不会生效。 - 依赖安装逻辑缺失:Dockerfile中虽然写了
COPY requirements.txt /requirements.txt,但整个构建流程没有执行pip install -r /requirements.txt的命令,requirements.txt中列出的所有依赖没有被安装到容器内部。 - 镜像引用不匹配:构建时给镜像打的标签为
puckel/docker-airflow(默认latest标签),但docker-compose中webserver服务配置引用的是puckel/docker-airflow:1.10.9标签,实际启动时会拉取公共仓库的原始旧版puckel镜像,完全没有用到本地新构建的带依赖的镜像。 - 包名选择错误:
google==3.0.0是PyPI上一个完全无关的同名老旧包,并非Google Cloud SDK对应的google-cloud-*系列依赖,即使安装该包也无法提供google模块的导入路径。 - 挂载逻辑冗余:docker-compose中将本地
./requirements.txt直接挂载到容器的/requirements.txt路径,覆盖了镜像构建时COPY进去的文件,但由于本身没有执行安装步骤,该挂载完全无法生效。
分步修复操作
1. 调整Dockerfile安装逻辑
在原有pip安装的RUN命令块中,新增requirements.txt的安装步骤,位置放在PYTHON_DEPS安装逻辑之后,保持在root用户权限下执行,避免权限不足报错:
# 原有RUN块中追加安装逻辑 && if [ -n "${PYTHON_DEPS}" ]; then pip install ${PYTHON_DEPS}; fi \ && pip install -r /requirements.txt \
2. 修正requirements.txt内容
删除无效的google==3.0.0依赖,保留实际需要的安装项:
httplib2==0.18.1 pandas==1.2.4 apache-airflow-providers-google==2.2.0
3. 修正镜像构建命令
去掉重复的同名build参数,将所有需要的依赖合并到同一个参数值中,多依赖用空格分隔:
docker build --rm \ --build-arg AIRFLOW_DEPS="google" \ --build-arg PYTHON_DEPS="httplib2==0.18.1 apache-airflow-providers-google==2.2.0" \ -t puckel/docker-airflow:1.10.14 .
注意:Docker的
--build-arg同个参数不要重复书写,否则只有最后一次传入的值会生效,多依赖用空格分隔放在同一个参数值内即可。
4. 调整docker-compose配置
- 将webserver服务的image值修改为本地新构建的镜像标签,避免拉取公共旧镜像
- 删除多余的requirements.txt挂载行,因为依赖已经在镜像构建阶段安装完成,不需要额外挂载本地文件
调整后的webserver核心配置示例:
webserver: image: puckel/docker-airflow:1.10.14 restart: always depends_on: - postgres environment: - LOAD_EX=n - EXECUTOR=Local volumes: - ./dags:/usr/local/airflow/dags ports: - "8080:8080"
5. 结果验证
容器启动后,进入webserver容器执行依赖检查命令,确认google相关包安装成功:
docker exec -it <webserver容器实际名称> pip list | grep google
输出中能看到google-api-core、google-auth、apache-airflow-providers-google等包信息,即代表依赖安装正常,原有Broken DAG报错会自动消失。
内容的提问来源于stack exchange,提问作者Erika_Marsha
相关产品推荐
相关产品推荐

