在 Debian Stretch 中安装 openjdk 失败

在 Debian Stretch 中安装 openjdk 失败

我的 Dockerfile 是:

FROM python:3.7-slim-stretch

RUN echo "deb http://security.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list

RUN apt-get update && apt-get install \
    --no-install-recommends -qq -y \
    apt-utils \
    poppler-utils \
    build-essential \
    cmake \
    libfreetype6-dev \
    libfontconfig-dev \
    libjpeg-dev \
    libopenjp2-7-dev \
    libcairo2-dev \
    pdftk \
    ghostscript \
    autoconf \
    automake \
    libtool \
    autoconf-archive \
    pkg-config \
    libpng-dev \
    libjpeg62-turbo-dev \
    libtiff5-dev \
    zlib1g-dev \
    imagemagick \
    wget \
    procps \
    curl \
    locales \
    libicu-dev \
    libpango1.0-dev \
    libcairo2-dev \
    g++ \
    make

RUN mkdir -p /usr/share/man/man1 && apt install -y openjdk-8-jdk


ENTRYPOINT [ "/bin/bash", "-l" ]

但是在安装openjdk-8的过程中开始失败:

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
The command '/bin/sh -c mkdir -p /usr/share/man/man1 && apt install -y openjdk-8-jdk' returned a non-zero code: 100

我已经可以将拉伸向后移植添加到源列表中,但我不知道为什么它会起作用。据我所知,默认情况下向后移植是禁用的:

RUN echo "deb http://security.debian.org/debian-security stretch/updates main" >> /etc/apt/sources.list
RUN echo "deb http://deb.debian.org/debian stretch-backports main" >> /etc/apt/sources.list

我想知道为什么它现在才开始崩溃,以及为什么添加拉伸向后移植或http://security.debian.org/debian-security oldoldstable/updates main源使其起作用。

答案1

软件包openjdk-8-jdk可在 Docker 镜像使用的存储库上找到python:3.7-slim-stretch。我刚刚在我的系统上运行了您的 Dockerfile,完全没有问题,正如您在第一个代码片段中所示的那样。

一些建议可能是对的,也可能是错误的,因为我不知道你正在运行什么系统:

  1. 确保您获得最新版本的 Docker 映像 python:3.7-slim-stretch。如果您在一个多月前下载了它,很可能您没有最新版本(截至撰写本文时,图像已在一个月前修改,我检查过这里)。

    为此,只需运行:

    docker pull python:3.7-slim-stretch

    而且,为了安全起见,您还可以使用以下方法清除 Docker 构建缓存:

    docker builder prune -a

  1. 更新 Docker(如果您可以并且不会破坏与工作流程中其他一些内容的兼容性)。如何执行此操作因系统和首选安装方法而异。这是一个很大的延伸,但您的版本可能有一些不需要处理的恶意错误。

  1. 检查您的处理器架构,因为不同的架构有不同的包,所以我能够运行你的 Dockerfile 这一事实对你来说可能没有任何意义,例如,如果arm你在我在的时候i386(我就是)。每个拱门的依赖关系也各不相同,因此这可能是一个需要研究的问题。在能够安装时检查安装的确切包名称和版本openjdk-8-jdk肯定有助于通过快速 Google 搜索识别其所有依赖项,并将它们与默认存储库上包的依赖项进行比较。

如果没有有关您的系统的更多信息以及对您端创建的容器的一些调试,我真的无法更准确,所以我希望这至少有一点帮助。

进行编辑,以便社区的机器人不会抱怨:OP 想知道为什么需要做一些不应该被要求的事情,我回答说这实际上是不需要的,并给出了 3 个可能出现这种情况的原因。基本上,我只能在这里假设一些事情,而没有关于 OP 系统的更多信息,但似乎 OP 由于其处理器的架构而需要添加额外的存储库(同样,一个远景,如果没有更多信息就无法确认)在测试用例上)。

相关内容