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. 다운로드한 지 한 달이 넘었다면 최신 버전이 아닐 가능성이 높습니다. (이 글을 쓰는 시점에는 이미지가 한 달 전에 수정되었기 때문에여기).

    이렇게 하려면 다음을 실행하세요.

    docker pull python:3.7-slim-stretch

    그리고 안전을 위해 다음을 사용하여 Docker 빌드 캐시를 지울 수도 있습니다.

    docker builder prune -a

  1. 도커 업데이트(가능하고 작업 흐름의 다른 항목과의 호환성을 손상시키지 않는 경우) 이를 수행하는 방법은 시스템 및 선호하는 설치 방법에 따라 다릅니다. 이것은 큰 확장이지만 귀하의 버전에는 처리할 필요가 없는 일부 악의적인 버그가 있을 수 있습니다.

  1. 프로세서 아키텍처를 확인하세요, 아키텍처마다 다른 패키지가 있기 때문에 내가 Dockerfile을 실행할 수 있다는 사실은 예를 들어 arm내가 여기 있는 동안 Dockerfile을 실행하고 있다면 아무 의미가 없을 수도 있습니다 i386. 종속성도 각 아치마다 다르기 때문에 살펴봐야 할 문제가 될 수 있습니다. 설치할 수 있을 때 설치된 정확한 패키지 이름과 버전을 확인하면 openjdk-8-jdk빠른 Google 검색을 통해 모든 종속성을 식별하고 이를 기본 저장소에 있는 패키지의 종속성과 비교하는 데 확실히 도움이 됩니다.

귀하의 시스템에 대한 추가 정보와 귀하 측에서 생성된 컨테이너에 대한 일부 디버깅 없이는 더 정확할 수 없으므로 이것이 조금이라도 도움이 되기를 바랍니다.

커뮤니티 봇이 불평하지 않도록 편집: OP는 필요하지 않은 작업을 수행해야 하는 이유를 알고 싶었고 저는 그것이 실제로 필요하지 않다고 응답하고 이것이 그럴 수 있는 3가지 이유를 제시했습니다. 기본적으로 OP 시스템에 대한 추가 정보 없이 여기서만 가정할 수 있지만 OP는 프로세서 아키텍처로 인해 추가 리포지토리를 추가해야 하는 것 같습니다(다시 말하지만 추가 정보가 없으면 장기적으로 확인할 수 없음). 사례).

관련 정보