Docker: Probleme bei der Installation von apt-utils


94

Ich versuche, apt-utilsauf Docker zu installieren, weil ich gerade apt-get updatedie Fehlermeldung erhalten habe : debconf: delaying package configuration, since apt-utils is not installed. Also habe ich eine Zeile zum Installieren hinzugefügt apt-utils(zusammen mit curl):

RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl

Aber ich bekomme immer noch diesen Fehler, der mich glauben lässt, dass mein Befehl nicht funktioniert hat. Unten ist meine Ausgabe, wenn ich versuche, das Bild zu erstellen.

Step 5/12 : RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl
 ---> Running in 6e6565ff01bd
Get:1 http://security.debian.org jessie/updates InRelease [94.4 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://deb.debian.org jessie-updates InRelease [145 kB]
Get:3 http://deb.debian.org jessie Release.gpg [2420 B]
Get:4 http://deb.debian.org jessie Release [148 kB]
Get:5 http://security.debian.org jessie/updates/main amd64 Packages [624 kB]
Get:6 http://deb.debian.org jessie-updates/main amd64 Packages [23.0 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 10.1 MB in 6s (1541 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libapt-inst1.5
The following NEW packages will be installed:
  apt-utils libapt-inst1.5
0 upgraded, 2 newly installed, 0 to remove and 24 not upgraded.
Need to get 537 kB of archives.
After this operation, 1333 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian/ jessie/main libapt-inst1.5 amd64 1.0.9.8.4 [169 kB]
Get:2 http://deb.debian.org/debian/ jessie/main apt-utils amd64 1.0.9.8.4 [368 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 537 kB in 0s (557 kB/s)
Selecting previously unselected package libapt-inst1.5:amd64.
(Reading database ... 21676 files and directories currently installed.)
Preparing to unpack .../libapt-inst1.5_1.0.9.8.4_amd64.deb ...
Unpacking libapt-inst1.5:amd64 (1.0.9.8.4) ...
Selecting previously unselected package apt-utils.
Preparing to unpack .../apt-utils_1.0.9.8.4_amd64.deb ...
Unpacking apt-utils (1.0.9.8.4) ...
Setting up libapt-inst1.5:amd64 (1.0.9.8.4) ...
Setting up apt-utils (1.0.9.8.4) ...
Processing triggers for libc-bin (2.19-18+deb8u10) ...
Reading package lists...
Building dependency tree...
Reading state information...
curl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
Removing intermediate container 6e6565ff01bd
 ---> f65e29c6a6b9
Step 6/12 : RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
 ---> Running in f5764ba56103
Detected operating system as debian/8.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing debian-archive-keyring which is needed for installing
apt-transport-https on many Debian systems.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/github_git-lfs.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.
Removing intermediate container f5764ba56103
 ---> a4e64687ab73

Was verursacht dies und wie kann ich es beheben? Danke dir!

Antworten:


90

Dies ist eigentlich kein Fehler und es ist sicher, ihn zu ignorieren. Ich habe eine große Anzahl von Container-Images erstellt, ohne jemals apt-utils darauf zu haben, und unabhängig von dieser Warnmeldung werden alle Paketinstallationen normal ausgeführt.

Wie auch immer, wenn Sie apt-utils haben möchten - installieren Sie es. Diese Warnung wird einmal angezeigt und verschwindet dann für zukünftige Aufrufe von apt-get (wie Sie in Ihrem eigenen Protokoll sehen können, curlwurde sie ohne diese Meldung installiert).

Hinweis : Wenn Sie apt-utils installieren, werden Sie andere Warnungen erhalten (weil jetzt das Installationsprogramm kann interaktive Konfiguration ausführen und wird das versuchen und scheitern). Führen Sie apt-get folgendermaßen aus, um diese zu unterdrücken und Pakete mit interaktiver Konfiguration mit ihren Standardeinstellungen zu verwendenDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


10
Können Sie eine Referenz für den Kommentar "Es ist sicher, ihn zu ignorieren" angeben?
Zak

18
Es ist eine bekannte Warnung, siehe zum Beispiel hier: github.com/phusion/baseimage-docker/issues/… (dies geschieht bei Paketen mit interaktiver Konfiguration, bei denen Fragen gestellt werden - dies bedeutet, dass die interaktive Konfiguration übersprungen wird, Sie dies jedoch nicht tun Ich brauche das nicht einmal und möchte die Standardeinstellungen trotzdem, da Sie eine automatische Installation ausführen.
Leo K

Dies ist nicht immer eine ignorierbare Warnung, sondern hängt vom jeweiligen Paket ab, das Sie installieren. Manchmal ist die Konfiguration erforderlich, und Sie müssen entweder eine interaktive Installation durchführen oder einen anderen Weg finden, um die erforderliche Konfiguration bereitzustellen.
Ken Williams

35

Nachdem ich über das Internet gesucht habe, habe ich einige Alternativen gefunden, die es wert sind, erwähnt zu werden, anstatt jedes Mal DEBIAN_FRONTEND=noninteractivevor apt-get install -y {your-pkgs}:

Alternative 1: ARG DEBIAN_FRONTEND = nicht interaktiv

Die ARG-Anweisung definiert eine Variable, die Benutzer beim Erstellen mit dem Docker-Befehl build mit dem Flag --build-arg = an den Builder übergeben können. (Referenz: [ 6 ])

Lösungsmerkmale:

  • ARG Die Direktive wird nur während des Builds festgelegt
  • Die Option 'nicht interaktiv' wird nur für die Erstellungszeit als Standardwert festgelegt.
  • Da es sich um ein Argument handelt, kann es geändert werden, indem ein anderer Wert für dieses Argument mit z docker build --build-arg DEBIAN_FRONTEND=newt

Beispiel:

ARG DEBIAN_FRONTEND=noninteractive
...
RUN apt-get -yq install {your-pkgs}

Alternative 2: On-the-Fly

Es ist die Lösung von Leo K.

Lösungsmerkmale:

  • Es kann eingestellt werden, wo es benötigt wird. Also eine gute feinkörnige Lösung.
  • Es kann in einem bestimmten Befehl auf einen anderen Wert festgelegt werden, sodass es nicht global festgelegt wird.
  • Der Geltungsbereich ist der RUNund wirkt sich nicht auf andere Richtlinien aus.

Beispiel:

RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install {your-pkgs}

Alternative 3: ENV DEBIAN_FRONTEND = nicht interaktiv

Die Einstellung ENV DEBIAN_FRONTEND noninteractivewäre ebenfalls eine Alternative, wird jedoch dringend davon abgeraten.

Eine andere Möglichkeit wäre, beim Betteln zu setzen und am Ende der Docker-Datei zu deaktivieren.

Lösungsmerkmale:

  • ENV Die Direktive behält die Umgebungsvariable nach dem Build bei (nicht empfohlen)
  • Es kann fehleranfällig sein, wenn Sie vergessen, den Standardwert zurückzusetzen.
  • Da es mit festgelegt ist ENV, wird es von allen Bildern und Containern geerbt, die aus dem Bild erstellt wurden, wodurch sich ihr Verhalten effektiv ändert. (Wie in [ 1 ] erwähnt) Benutzer, die diese Images verwenden, haben Probleme bei der interaktiven Installation von Software, da Installationsprogramme keine Dialogfelder anzeigen.
  • Das Standard-Frontend ist DEBIAN_FRONTEND=newt(siehe [ 2 ], daher muss es am Ende der Datei festgelegt werden.

Beispiel:

# Set for all apt-get install, must be at the very beginning of the Dockerfile.
ENV DEBIAN_FRONTEND noninteractive
...
# Non-interactive modes get set back.
ENV DEBIAN_FRONTEND newt

Alternative 4: RUN-Export DEBIAN_FRONTEND = nicht interaktiv

Lösungsmerkmale:

  • Ganz ähnlich wie bei der Alternative 2
  • Durch die Entkopplung leidet der Zusammenhalt: Warum wird diese Variable exportiert und zu was gehört sie (apt-get).
  • Der Geltungsbereich ist der RUNund wirkt sich nicht auf andere Richtlinien aus.

Beispiel:

# Set the frontend and then install your package
RUN export DEBIAN_FRONTEND=noninteractive && \
    ...
    apt-get -yq install {your-pkgs} && \
    ...

Mehr zu lesen (Referenzen)


2
Ich habe "Alternative 2: On-the-Fly" verwendet: sehr sauber und praktisch, ich habe keine verwirrenden Warnungen mehr
Herve-Guerin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.