【问题标题】:Error when building docker image for jupyter spark notebook为 jupyter spark notebook 构建 docker 映像时出错
【发布时间】:2021-06-01 21:51:15
【问题描述】:

我正在尝试按照此处的指南在 docker 中构建 Jupyter notebook: https://github.com/cordon-thiago/airflow-spark 并收到退出代码错误:8。 我跑了:

$ docker build --rm --force-rm -t jupyter/pyspark-notebook:3.0.1 .

建筑停在代码处:

RUN wget -q $(wget -qO- https://www.apache.org/dyn/closer.lua/spark/spark-${APACHE_SPARK_VERSION}/spark-${APACHE_SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz\?as_json | \
    python -c "import sys, json; content=json.load(sys.stdin); print(content['preferred']+content['path_info'])") && \
    echo "${spark_checksum} *spark-${APACHE_SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" | sha512sum -c - && \
    tar xzf "spark-${APACHE_SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" -C /usr/local --owner root --group root --no-same-owner && \
    rm "spark-${APACHE_SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz"

错误信息如下:


 => ERROR [4/9] RUN wget -q $(wget -qO- https://www.apache.org/dyn/closer.lua/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz?as_json |     python -c "import sys, json; content=json.load(sys.stdin);   2.3s
------
 > [4/9] RUN wget -q $(wget -qO- https://www.apache.org/dyn/closer.lua/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz?as_json |     python -c "import sys, json; content=json.load(sys.stdin); print(content[
'preferred']+content['path_info'])") &&     echo "F4A10BAEC5B8FF1841F10651CAC2C4AA39C162D3029CA180A9749149E6060805B5B5DDF9287B4AA321434810172F8CC0534943AC005531BB48B6622FBE228DDC *spark-3.0.1-bin-hadoop2.7.
tgz" | sha512sum -c - &&     tar xzf "spark-3.0.1-bin-hadoop2.7.tgz" -C /usr/local --owner root --group root --no-same-owner &&     rm "spark-3.0.1-bin-hadoop2.7.tgz":
------
executor failed running [/bin/bash -o pipefail -c wget -q $(wget -qO- https://www.apache.org/dyn/closer.lua/spark/spark-${APACHE_SPARK_VERSION}/spark-${APACHE_SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz\
?as_json |     python -c "import sys, json; content=json.load(sys.stdin); print(content['preferred']+content['path_info'])") &&     echo "${spark_checksum} *spark-${APACHE_SPARK_VERSION}-bin-hadoop${HADOOP_
VERSION}.tgz" | sha512sum -c - &&     tar xzf "spark-${APACHE_SPARK_VERSION}-bin-hadoop${HADOOP_VERSION}.tgz" -C /usr/local --owner root --group root --no-same-owner &&     rm "spark-${APACHE_SPARK_VERSION}
-bin-hadoop${HADOOP_VERSION}.tgz"]: exit code: 8

如果有人能在这方面启发我,我真的很感激。谢谢!

【问题讨论】:

  • 调试的第一步可能是分解RUN 命令;而不是RUN a && b && c && d,有四个单独的RUN 命令。哪一个失败了?

标签: docker apache-spark jupyter-notebook jupyter


【解决方案1】:

退出代码 8 是 likely from wget,表示来自服务器的错误响应。例如,Dockerfile 尝试从中获取 wget 的路径不再有效:https://www.apache.org/dyn/closer.lua/spark/spark-3.0.1/spark-3.0.1-bin-hadoop2.7.tgz

从 repo 上的问题来看,Apache version 3.0.1 is no longer valid 因此您应该使用--build-arg 将 APACHE_SPARK 版本覆盖为 3.0.2:

docker build --rm --force-rm \
  --build-arg spark_version=3.0.2 \
  -t jupyter/pyspark-notebook:3.0.2 .

编辑

查看下面的评论了解更多,有效的命令是:

docker build --rm --force-rm \
  --build-arg spark_version=3.1.1 \
  --build-arg hadoop_version=2.7 \
  -t jupyter/pyspark-notebook:3.1.1 .  

并更新了 spark 校验和以反映 3.1.1 的版本:https://downloads.apache.org/spark/spark-3.1.1/spark-3.1.1-bin-hadoop2.7.tgz.sha512

为了使这个答案在未来具有相关性,它可能需要更新版本并再次校验和以获得最新的 spark/hadoop 版本。

【讨论】:

  • 谢谢!这解决了我的问题。除了添加 --build-arg 来覆盖 spark_version 和 hadoop_version 的版本:``` docker build --rm --force-rm -t jupyter/pyspark-notebook:3.1.1 。 --build-arg spark_version=3.1.1 --build-arg hadoop_version=2.7 ``` 我还必须更新 docker 文件中的 spark_checksum 以匹配新的 spark 链接:downloads.apache.org/spark/spark-3.1.1/…
  • @ilovejames 很高兴它有帮助。感谢您回来并说您还必须做些什么才能使其发挥作用!