Debian

無法在 Debian Stretch 中安裝 openjdk

  • September 23, 2021

我的 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源使它起作用。

openjdk-8-jdk在 Docker image 使用的 repos 上可用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 搜尋辨識其所有依賴項,並將它們與預設 repo 上的軟體包的依賴項進行比較。

如果沒有關於您的系統的更多資訊以及對您最終創建的容器進行一些調試,我真的不能更精確,所以我希望這至少能有所幫助。

編輯以便社區的機器人不會抱怨:OP 想知道為什麼需要做一些不應該做的事情,我回答說實際上不需要,並給出了 3 個可能的原因。基本上,在沒有關於 OP 系統的更多資訊的情況下,我只能在這裡假設幾件事,但似乎 OP 由於其處理器的拱門而需要添加額外的儲存庫(再次,長鏡頭,沒有更多資訊無法確認在測試案例上)。

引用自:https://unix.stackexchange.com/questions/670205