Docker: występują problemy z instalacją apt-utils

118

Próbuję zainstalować apt-utilsna Döcker ponieważ kiedy tylko robi apt-get update, ja otrzymuję błąd: debconf: delaying package configuration, since apt-utils is not installed. Dodałem więc linię do zainstalowania apt-utils(wraz z curl):

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

Ale nadal otrzymuję ten błąd, co prowadzi mnie do przekonania, że ​​moje polecenie nie zadziałało. Poniżej znajduje się mój wynik, gdy próbuję zbudować obraz.

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

Co jest tego przyczyną i jak mogę to naprawić? Dziękuję Ci!

peachykeen
źródło

Odpowiedzi:

116

W rzeczywistości nie jest to błąd i można go bezpiecznie zignorować. Zbudowałem dużą liczbę obrazów kontenerów bez posiadania apt-utils na żadnym z nich i niezależnie od tego komunikatu ostrzegawczego, wszystkie instalacje pakietów przebiegają i działają normalnie.

W każdym razie, jeśli chcesz mieć apt-utils - zainstaluj go. Otrzymasz to ostrzeżenie raz, a następnie zniknie ono przy przyszłych wywołaniach apt-get (jak możesz zobaczyć w swoim własnym dzienniku, curlzostał zainstalowany bez tego komunikatu).

UWAGA jeśli zainstalujesz apt-utils, otrzymasz inne ostrzeżenia (ponieważ teraz instalator może uruchomić interaktywną konfigurację i spróbuje tego dokonać , ale zakończy się niepowodzeniem). Aby je usunąć i mieć pakiety, które mają interaktywną konfigurację z domyślnymi ustawieniami, uruchom apt-get w ten sposóbDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....

Leo K.
źródło
11
Czy możesz podać odniesienie do komentarza „można go bezpiecznie zignorować”?
Zak
19
Jest to znane ostrzeżenie, patrz na przykład tutaj: github.com/phusion/baseimage-docker/issues/ ... (zdarza się to w przypadku pakietów, które mają konfigurację interaktywną, w której zadają pytania - oznacza to, że konfiguracja interaktywna jest pomijana, ale nie Nawet tego nie potrzebuję i mimo wszystko chcesz mieć wartości domyślne, ponieważ uruchamiasz automatyczną instalację).
Leo K
Nie zawsze jest to ostrzeżenie, które można zignorować, zależy to od konkretnego pakietu, który instalujesz. Czasami konfiguracja jest konieczna i będziesz musiał albo przeprowadzić instalację interaktywną, albo znaleźć inny sposób na zapewnienie konfiguracji, której potrzebuje.
Ken Williams
47

Po wyszukiwaniu w Internecie znalazłem kilka alternatyw, o których warto wspomnieć, zamiast za każdym razem umieszczać DEBIAN_FRONTEND=noninteractiveprzed nimi apt-get install -y {your-pkgs}:

Alternatywa 1: ARG DEBIAN_FRONTEND = nieinteraktywna

Instrukcja ARG definiuje zmienną, którą użytkownicy mogą przekazać w czasie kompilacji do konstruktora za pomocą polecenia docker build przy użyciu flagi --build-arg =. (Odniesienie: [ 6 ])

Charakterystyka rozwiązania:

  • ARG dyrektywa jest ustawiana tylko podczas kompilacji
  • Opcja „noninteractive” jest ustawiona jako wartość domyślna tylko na czas kompilacji.
  • Ponieważ jest to argument, można go zmienić, przekazując mu inną wartość np docker build --build-arg DEBIAN_FRONTEND=newt

Przykład:

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

Alternatywa 2: w locie

To rozwiązanie od Leo K.

Charakterystyka rozwiązania:

  • Można go ustawić tam, gdzie jest potrzebny. A więc dobre, drobnoziarniste rozwiązanie.
  • Może mieć inną wartość w konkretnym poleceniu, więc nie jest ustawiana globalnie.
  • Zakres jest RUNi nie będzie miał wpływu na inne dyrektywy.

Przykład:

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

Alternatywa 3: ENV DEBIAN_FRONTEND = nieinteraktywny

Otoczenie ENV DEBIAN_FRONTEND noninteractiverównież byłoby alternatywą, ale jest wysoce odradzane.

Innym sposobem byłoby ustawienie na początku i rozbrojenie na końcu pliku Dockerfile.

Charakterystyka rozwiązania:

  • ENV Dyrektywa będzie ponadto utrwalać zmienną środowiskową po kompilacji (niezalecane)
  • Może to być podatne na błędy, jeśli zapomnisz przywrócić domyślną wartość.
  • Ponieważ jest ustawiony za pomocą ENV, zostanie odziedziczony przez wszystkie obrazy i elementy zbudowane z obrazu, skutecznie zmieniając ich zachowanie. (Jak wspomniano w [ 1 ]) Osoby używające tych obrazów napotykają problemy podczas interaktywnej instalacji oprogramowania, ponieważ instalatory nie wyświetlają żadnych okien dialogowych.
  • Domyślna nakładka to DEBIAN_FRONTEND=newt(patrz [ 2 ], więc musi być ustawiona na końcu pliku.

Przykład:

# 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

Alternatywa 4: eksport RUN DEBIAN_FRONTEND = nieinteraktywny

Charakterystyka rozwiązania:

  • Całkiem podobny do alternatywy 2
  • Rozprzęganie cierpi na spójności: dlaczego istnieje eksport tej zmiennej i do czego ona należy (apt-get).
  • Zakres jest RUNi nie będzie miał wpływu na inne dyrektywy.

Przykład:

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

Więcej do przeczytania (referencje)

KeyMaker00
źródło
2
Użyłem „Alternatywy 2: w locie”: bardzo czysta i wygodna, nie mam już mylących ostrzeżeń
herve-guerin
Wybieram Alternatywę 1 i nadal otrzymuję ostrzeżenia. Mój plik Dockerfile zaczyna się FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractivei uruchamiamdocker build --no-cache -t node-10-16-2-plus-chrome .
Marecky