Docker容器中Apache Airflow镜像安装h2o失败问题求助
问题排查与修复方案
核心问题
- 你定义了
x-airflow-common扩展字段,但所有Airflow服务(webserver/scheduler/worker/init/flower)都没有引用继承该配置,导致其中写的build: ./airflow完全未生效。 - 所有Airflow服务都显式指定了官方镜像
image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.1.2},Docker Compose会优先使用该官方镜像,不会用到你本地构建的带h2o依赖的自定义镜像。 - 你在apt中安装的
h2o是Linux平台的HTTP服务器软件,不是Python机器学习库h2o,属于无效安装;且h2o运行依赖Java环境,你当前的镜像缺少该依赖,就算pip安装成功也无法正常运行。 - 你将h2o写入了根目录的requirements.txt,但Dockerfile中没有加载该文件的逻辑,依赖不会自动安装。
具体修复步骤
1. 修正Dockerfile
更新airflow/Dockerfile内容,安装正确的依赖:
FROM apache/airflow:2.1.2 USER root RUN apt-get update \ && apt-get install -y --no-install-recommends \ build-essential openjdk-11-jre-headless \ && apt-get autoremove -yqq --purge \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* USER airflow # 复制根目录的requirements.txt到镜像中 COPY ../requirements.txt . RUN pip install --no-cache-dir --user -r requirements.txt
2. 修正docker-compose.yaml
两种修改方式二选一即可:
- 简洁方案:给每个Airflow服务添加公共配置继承,删除重复配置
给airflow-webserver、airflow-scheduler、airflow-worker、airflow-init、flower五个服务的配置开头添加<<: *x-airflow-common,同时删除这些服务中重复的image、environment、volumes、user、depends_on字段。 - 最小改动方案:直接在每个Airflow服务中添加build配置,删除image字段
给上述五个服务添加build: ./airflow字段,同时删除原来的image: ${AIRFLOW_IMAGE_NAME:-apache/airflow:2.1.2}字段。
3. 重新构建启动服务
执行以下命令清除旧容器缓存,重新构建启动:
docker-compose down -v docker-compose build --no-cache docker-compose up -d
4. 验证安装
进入任意Airflow服务容器验证h2o是否安装成功:
docker exec -it <容器ID> pip list | grep h2o
完成上述操作后,Airflow运行环境就已经配置好h2o依赖,不会再报模块缺失错误。
内容的提问来源于stack exchange,提问作者yudhiesh
相关产品推荐
相关产品推荐

