502 Stimmen

Kann keine Pakete innerhalb des Docker Ubuntu-Images installieren

Ich habe das Ubuntu 14.04-Image auf Docker installiert. Danach erhalte ich beim Versuch, Pakete innerhalb des Ubuntu-Images zu installieren, den Fehler "Paket kann nicht gefunden werden":

apt-get install curl

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Paket curl kann nicht gefunden werden

Wie kann ich diesen Fehler beheben?

969voto

ISanych Punkte 20150

Es liegt daran, dass es keinen Paketcache im Image gibt. Sie müssen also folgendes ausführen:

apt-get update

bevor Sie Pakete installieren, und wenn Ihr Befehl in einem Dockerfile ist, werden Sie dann benötigen:

apt-get -y install curl

Um die Standardausgabe eines Befehls zu unterdrücken, verwenden Sie -qq. Zum Beispiel:

apt-get -qq -y install curl

237voto

creimers Punkte 4234

Von den Dokumenten im Mai 2017 2018 2019 2020 2021 2022 2023 2024

Kombinieren Sie immer RUN apt-get update mit apt-get install im selben RUN-Befehl, zum Beispiel

RUN apt-get update && apt-get install -y package-bar

(...)

Die Verwendung von apt-get update allein in einem RUN-Befehl führt zu Cache-Problemen und nachfolgende apt-get install-Anweisungen schlagen fehl.

(...)

Die Verwendung von RUN apt-get update && apt-get install -y stellt sicher, dass Ihr Dockerfile die neuesten Paketversionen installiert, ohne weitere Codierung oder manuelle Eingriffe. Diese Technik wird als "Cache Busting" bezeichnet.

22voto

Gourav Singla Punkte 1638

Fügen Sie folgenden Befehl in die Dockerdatei hinzu:

RUN apt-get update

12voto

Connor Punkte 3095

Stellen Sie sicher, dass Sie keine Syntaxfehler in Ihrem Dockerfile haben, da diese auch diesen Fehler verursachen können. Ein korrektes Beispiel ist:

RUN apt-get update \
    && apt-get -y install curl \
    another-package

Es war eine Kombination aus der Behebung eines Syntaxfehlers und dem Hinzufügen von apt-get update, die das Problem für mich gelöst hat.

10voto

because_im_batman Punkte 700

Das Ausführen von apt-get update hat das Problem für mich nicht gelöst, weil es anscheinend immer das Ergebnis dieses Befehls aus dem Cache gelesen hat und der Cache anscheinend beschädigt war. Meine Vermutung ist, dass dies passiert, wenn Sie mehrere Docker-Container mit demselben 'Basisimage' haben (für mich war es python:3.8-slim).

Also, das hat für mich funktioniert:

Alle Docker-Container im System stoppen

docker stop $(sudo docker ps -aq) 

Entfernen Sie alle hängenden Container

docker container prune 

Entfernen Sie alle hängenden Images

docker image prune 

Nach Ausführung dieser Befehle scheint das Docker-Build den beschädigten Cache zu verlieren und führt ein sauberes apt-get update durch, das die korrekten Paketinformationen abruft und die Paketinstallationen wie erwartet fortschreitet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X