Pakete können im Docker-Ubuntu-Image nicht installiert werden

289

Ich habe Ubuntu 14.04 Image auf Docker installiert. Wenn ich danach versuche, Pakete im Ubuntu-Image zu installieren, kann ich den Paketfehler nicht finden:

apt-get install curl

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package curl

Wie behebe ich diesen Fehler?

Entwickler
quelle

Antworten:

620

Da das Image keinen Paket-Cache enthält, müssen Sie Folgendes ausführen:

apt-get update

Bevor Sie Pakete installieren und sich Ihr Befehl in einer Docker-Datei befindet, benötigen Sie:

apt-get -y install curl

Um die Standardausgabe eines Befehls zu unterdrücken, verwenden Sie -qq. Z.B

apt-get -qq -y install curl
ISanych
quelle
1
Dies funktioniert für mich, sollte ich -qq für alle Zeiten ausführen
Entwickler
6
-qq unterdrückt die Ausgabe, die Sie normalerweise in Dockerfile nicht benötigen. Ein weiterer netter Trick - sagen Sie debconf, dass es in einer nicht interaktiven Umgebung funktioniert: echo 'debconf debconf / frontend select Noninteractive' | Debconf-Set-Auswahl
ISanych
7
Aus irgendeinem Grund funktioniert dies nicht für mich, immer noch die gleiche Nachricht "E: Paket kann nicht gefunden werden .."
tblancog
"apt-get-update" und "apt-get install curl" haben gut funktioniert!
Sindhu
Ich habe festgestellt, dass dieser Fehler auch im Docker auftritt, wenn der Speicherplatz knapp wird. Ich bin gelaufen docker image prune, um Speicherplatz freizugeben, und das hat es für mich behoben.
Jonathan Rys
123

Aus den Dokumenten im Mai2017 2018 2019 2020

Kombinieren Sie zum Beispiel immer RUN apt-get updatemit apt-get installderselben RUNAussage

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

(...)

Die apt-get updatealleinige Verwendung in einer RUNAnweisung führt zu Caching-Problemen und nachfolgende apt-get installAnweisungen schlagen fehl.

(...)

Durch RUN apt-get update && apt-get install -ydie Verwendung wird sichergestellt, dass Ihr Dockerfile die neuesten Paketversionen ohne weitere Codierung oder manuelle Eingriffe installiert. Diese Technik wird als "Cache Busting" bezeichnet.

Creimers
quelle
14

Fügen Sie folgenden Befehl in Dockerfile hinzu:

RUN apt-get update
Gourav Singla
quelle
4

Stellen Sie sicher, dass Ihre Docker-Datei keine Syntaxfehler enthält, da dies ebenfalls zu diesem Fehler führen kann. Ein korrektes Beispiel ist:

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

Es war eine Kombination aus Beheben eines Syntaxfehlers und Hinzufügen apt-get update, die das Problem für mich löste.

Connor
quelle
1

Ich habe festgestellt, dass das Mounten eines lokalen Volumes über / tmp Berechtigungsprobleme verursachen kann, wenn das "apt-get update" ausgeführt wird, wodurch verhindert wird, dass der Paketcache gefüllt wird. Hoffentlich ist dies nicht etwas, was die meisten Leute tun, aber es ist etwas anderes, nach dem Sie suchen müssen, wenn Sie dieses Problem sehen.

Groboclown
quelle
-3

Sie müssen die Paketliste in Ihrem Ubuntu aktualisieren:

$ sudo apt-get update
$ sudo apt-get install <package_name>
unbenannter Bulle
quelle