내 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을 실행했습니다.
귀하가 어떤 시스템을 실행하고 있는지 모르기 때문에 일부 제안은 옳을 수도 있고 그렇지 않을 수도 있습니다.
최신 버전의 Docker 이미지를 가져왔는지 확인하세요.
python:3.7-slim-stretch
. 다운로드한 지 한 달이 넘었다면 최신 버전이 아닐 가능성이 높습니다. (이 글을 쓰는 시점에는 이미지가 한 달 전에 수정되었기 때문에여기).이렇게 하려면 다음을 실행하세요.
docker pull python:3.7-slim-stretch
그리고 안전을 위해 다음을 사용하여 Docker 빌드 캐시를 지울 수도 있습니다.
docker builder prune -a
- 도커 업데이트(가능하고 작업 흐름의 다른 항목과의 호환성을 손상시키지 않는 경우) 이를 수행하는 방법은 시스템 및 선호하는 설치 방법에 따라 다릅니다. 이것은 큰 확장이지만 귀하의 버전에는 처리할 필요가 없는 일부 악의적인 버그가 있을 수 있습니다.
- 프로세서 아키텍처를 확인하세요, 아키텍처마다 다른 패키지가 있기 때문에 내가 Dockerfile을 실행할 수 있다는 사실은 예를 들어
arm
내가 여기 있는 동안 Dockerfile을 실행하고 있다면 아무 의미가 없을 수도 있습니다i386
. 종속성도 각 아치마다 다르기 때문에 살펴봐야 할 문제가 될 수 있습니다. 설치할 수 있을 때 설치된 정확한 패키지 이름과 버전을 확인하면openjdk-8-jdk
빠른 Google 검색을 통해 모든 종속성을 식별하고 이를 기본 저장소에 있는 패키지의 종속성과 비교하는 데 확실히 도움이 됩니다.
귀하의 시스템에 대한 추가 정보와 귀하 측에서 생성된 컨테이너에 대한 일부 디버깅 없이는 더 정확할 수 없으므로 이것이 조금이라도 도움이 되기를 바랍니다.
커뮤니티 봇이 불평하지 않도록 편집: OP는 필요하지 않은 작업을 수행해야 하는 이유를 알고 싶었고 저는 그것이 실제로 필요하지 않다고 응답하고 이것이 그럴 수 있는 3가지 이유를 제시했습니다. 기본적으로 OP 시스템에 대한 추가 정보 없이 여기서만 가정할 수 있지만 OP는 프로세서 아키텍처로 인해 추가 리포지토리를 추가해야 하는 것 같습니다(다시 말하지만 추가 정보가 없으면 장기적으로 확인할 수 없음). 사례).