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

Dockerfile构建Airflow+Spark镜像报错(exit code127)及Python依赖咨询

问题与解决方案

问题描述

我希望通过Dockerfile构建包含Airflow和Spark的镜像,创建可运行Airflow流水线的容器,该流水线会启动Spark任务,从GCP Bucket读取大量CSV文件并处理。编写的Dockerfile如下:

FROM apache/airflow:2.5.0

ARG SPARK_VERSION="3.1.2"
ARG HADOOP_VERSION="3.2"

# setup spark
ENV SPARK_HOME /usr/local/spark
RUN cd "/tmp" && \
    wget --no-verbose "https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" && \
    tar -xvzf "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" && \
    mkdir -p "${SPARK_HOME}/bin" && \
    mkdir -p "${SPARK_HOME}/assembly/target/scala-2.12/jars" && \
    cp -a "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}/bin/." "${SPARK_HOME}/bin/" && \
    cp -a "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}/jars/." "${SPARK_HOME}/assembly/target/scala-2.12/jars/" && \
    rm "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz"

构建镜像时出现exit code 127错误,错误信息:

docker build -t my_airflow_image .
[+] Building 0.3s (5/5) FINISHED                                                                                                                                                                           
 => [internal] load build definition from Dockerfile                                                                                                                                                   0.0s
 => => transferring dockerfile: 795B                                                                                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/apache/airflow:2.5.0                                                                                                                                        0.0s
 => CACHED [1/2] FROM docker.io/apache/airflow:2.5.0                                                                                                                                                   0.0s
 => ERROR [2/2] RUN cd "/tmp" &&     wget --no-verbose "https://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz" &&     tar -xvzf "spark-3.1.2-bin-hadoop3.2.tgz" &&     mkdi  0.2s
------
 > [2/2] RUN cd "/tmp" &&     wget --no-verbose "https://archive.apache.org/dist/spark/spark-3.1.2/spark-3.1.2-bin-hadoop3.2.tgz" &&     tar -xvzf "spark-3.1.2-bin-hadoop3.2.tgz" &&     mkdir -p "/usr/local/spark/bin" &&     mkdir -p "/usr/local/spark/assembly/target/scala-2.12/jars" &&     cp -a "spark-3.1.2-bin-hadoop3.2/bin/." "/usr/local/spark/bin/" &&     cp -a "spark-3.1.2-bin-hadoop3.2/jars/." "/usr/local/spark/assembly/target/scala-2.12/jars/" &&     rm "spark-3.1.2-bin-hadoop3.2.tgz":
#5 0.227 /bin/bash: line 1: wget: command not found
------
executor failed running [/bin/bash -o pipefail -o errexit -o nounset -o nolog -c cd "/tmp" &&     wget --no-verbose "https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" &&     tar -xvzf "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" &&     mkdir -p "${SPARK_HOME}/bin" &&     mkdir -p "${SPARK_HOME}/assembly/target/scala-2.12/jars" &&     cp -a "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}/bin/." "${SPARK_HOME}/bin/" &&     cp -a "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}/jars/." "${SPARK_HOME}/assembly/target/scala-2.12/jars/" &&     rm "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz"]: exit code: 127

请求解决该错误,并咨询:是否需要在容器中额外安装Python?因为Airflow使用Python开发。


错误解决

错误原因是apache/airflow:2.5.0基础镜像未预装wget工具,导致执行wget命令时找不到该命令。需要在安装Spark前先安装必要的系统工具。

修改后的Dockerfile如下:

FROM apache/airflow:2.5.0

ARG SPARK_VERSION="3.1.2"
ARG HADOOP_VERSION="3.2"

# 安装wget、tar等必要工具
RUN apt-get update && \
    apt-get install -y --no-install-recommends wget tar && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# setup spark
ENV SPARK_HOME /usr/local/spark
RUN cd "/tmp" && \
    wget --no-verbose "https://archive.apache.org/dist/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" && \
    tar -xvzf "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" && \
    mkdir -p "${SPARK_HOME}/bin" && \
    mkdir -p "${SPARK_HOME}/assembly/target/scala-2.12/jars" && \
    cp -a "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}/bin/." "${SPARK_HOME}/bin/" && \
    cp -a "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}/jars/." "${SPARK_HOME}/assembly/target/scala-2.12/jars/" && \
    rm -rf "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}" "spark-${SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz"

说明:

  • 新增apt-get update && apt-get install -y --no-install-recommends wget tar命令,安装所需工具;
  • 最后清理apt缓存并删除解压后的Spark目录,减少镜像体积。

Python安装疑问

不需要额外安装Python。apache/airflow官方镜像已经内置了对应版本的Python环境(Airflow 2.5.0默认使用Python 3.8),完全满足Airflow的运行需求,也能支持你编写的Python类型Airflow DAG。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:25:02