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-jdkDockerイメージが使用するリポジトリにありますpython:3.7-slim-stretch。最初のコードスニペットで示したように、まったく問題なく私のシステムでDockerfileを実行しました。

どのシステムを実行しているかわからないため、一部の提案は正しい場合もそうでない場合もあります。

  1. 最新バージョンのDockerイメージをインポートしたことを確認してください。 python:3.7-slim-stretch。ダウンロードしてから1ヶ月を超えた場合は、最新バージョンではない可能性があります。 (この記事を書く時点では、画像が1ヶ月前に修正されたためここ)。

    これを行うには、次を実行します。

    docker pull python:3.7-slim-stretch

    そして、安全のために、以下を使用してDockerビルドキャッシュを消去することもできます。

    docker builder prune -a

  1. ドッカーアップデート(可能で、ワークフローの他の項目との互換性を損なわない場合)これを行う方法は、システムと好みのインストール方法によって異なります。これは大きな拡張ですが、あなたのバージョンには対処する必要がないいくつかの悪意のあるバグがあるかもしれません。

  1. プロセッサアーキテクチャを確認してください、アーキテクチャごとに異なるパッケージがあるため、私がDockerfileを実行できるという事実は、例えばarm私がここにいる間にDockerfileを実行している場合は意味がないかもしれませんi386。依存関係もアーチごとに異なるため、見なければならない問題になる可能性があります。インストールできるときにインストールされている正確なパッケージ名とバージョンを確認することで、Google検索ですべての依存関係をopenjdk-8-jdk識別し、それをデフォルトのリポジトリにあるパッケージの依存関係と比較するのに役立ちます。

あなたのシステムに関する追加情報とあなたの側で作成されたコンテナのいくつかのデバッグがなければ、より正確ではないので、これが少しでも役に立つことを願っています。

コミュニティボットが文句を言わないように編集:OPは不要なことをする必要がある理由を知りたかったので、私はそれが本当に必要ではないと答え、これができる3つの理由を提示しました。デフォルトでは、OPシステムに関する追加情報なしでここでのみ想定できますが、OPはプロセッサアーキテクチャのために追加のリポジトリを追加する必要があるようです(やはり追加情報がないと長期的には確認できません)。ケース)。

関連情報