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

GitLab CI/CD修改文件后构建Spark镜像内容异常问题

Spark镜像构建异常:GitLab CI/CD构建后缺失基础镜像自带JAR包

问题现象

修改Dockerfile本身或任何被复制到容器的文件后,GitLab CI/CD构建的镜像中/opt/spark/jars/目录仅包含自行添加的JAR包,缺失FROM spark:3.4.1-python3基础镜像自带的原Spark JAR包,导致Spark任务执行报错。

技术栈

  • Kubernetes部署的Spark集群(1个Master节点 + 2个Worker节点)
  • 本地Airflow向Spark集群提交任务
  • 每个Airflow任务通过Docker Operator运行包含spark-submit的Docker容器
  • GitLab CI/CD负责构建Docker镜像并推送到私有GitLab镜像仓库

.gitlab-ci.yml配置

build:
  stage: build
  when: manual
  only:
    - tags

  services:
    - docker:17.06.2-dind

  script:
    - docker build -q --no-cache --build-arg MINIO_KEY=$MINIO_KEY --build-arg MINIO_SECRET=$MINIO_SECRET -t $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG

Dockerfile配置

FROM spark:3.4.1-python3

USER root

RUN apt-get -qq update && apt-get -qq install -y python3-pip wget git

RUN wget -q https://mygit.com.br/api/v4/projects/341/repository/files/jars-spark.tar/raw?private_token=mytoken -O jars-spark.tar \
&& tar -xvf jars-spark.tar --strip-components=1 -C /opt/spark/jars jars-spark \
&& rm -f jars-spark.tar 

WORKDIR /opt/spark/conf
COPY ./log4j2.properties log4j2.properties

WORKDIR /opt/spark/app
COPY ./docrecon-landing-incremental.py docrecon-landing-incremental.py
COPY ./docrecon-bronze.py docrecon-bronze.py
COPY ./docrecon-silver.py docrecon-silver.py

COPY ./moviproc-landing-incremental.py moviproc-landing-incremental.py
COPY ./moviproc-bronze.py moviproc-bronze.py
COPY ./moviproc-silver.py moviproc-silver.py

COPY ./requirements.txt requirements.txt

RUN pip3 install --timeout 1000 -r requirements.txt --user

ARG MINIO_KEY
ENV MINIO_KEY=${MINIO_KEY}

ARG MINIO_SECRET
ENV MINIO_SECRET=${MINIO_SECRET}

错误表现

  • 镜像内容差异:标签0.1.10的镜像包含基础镜像+自行添加的完整JAR包集合;修改文件后的标签0.1.11镜像仅存在自行添加的JAR包。
  • Spark任务执行报错:
airflow.exceptions.AirflowException: Docker container failed: {'Error': None, 'StatusCode': 1} lines Error: Could not find or load main class org.apache.spark.launcher.Main
Caused by: java.lang.ClassNotFoundException: org.apache.spark.launcher.Main
/opt/spark/bin/spark-class: line 97: CMD: bad array subscript

排查信息

仅通过GitLab的dind构建部署镜像时会出现该问题,本地构建推送则无异常;GitLab Runner日志中存在的错误在镜像正常构建时也会出现,判断与当前问题无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:22:51