Docker: виникають проблеми з встановленням apt-utils


118

Я намагаюся встановити apt-utilsна Докер , тому що , коли я просто роблю apt-get update, я отримую повідомлення про помилку: debconf: delaying package configuration, since apt-utils is not installed. Тому я додав рядок для встановлення apt-utils(разом із curl):

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

Але я все ще отримую цю помилку, яка змушує мене вважати, що моя команда не працювала. Нижче мій результат, коли я намагаюся створити образ.

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

Що спричиняє це та як я можу це виправити? Дякую!

Відповіді:


116

Насправді це не помилка, і її можна ігнорувати безпечно. Я створив велику кількість зображень контейнерів, жодного разу не застосувавши apt-utils на жодному з них, і незалежно від цього попереджувального повідомлення, усі встановлення пакунків проходять і працюють нормально.

У будь-якому випадку, якщо ви хочете мати apt-utils - встановіть його. Він дасть вам це попередження один раз, а потім зникне для подальших викликів apt-get (як ви можете бачити у власному журналі, curlвстановленому без цього повідомлення).

ПРИМІТКА. Якщо ви встановите apt-utils, ви отримаєте інші попередження (адже тепер програма встановлення може запустити інтерактивну конфігурацію і спробує це зробити та не вдасться). Щоб придушити їх і мати пакети, які мають інтерактивну конфігурацію за замовчуванням, запустіть apt-get такDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


11
Чи можете ви надати посилання на коментар "це безпечно ігнорувати"?
Зак

19
Це відоме попередження, див., Наприклад, тут: github.com/phusion/baseimage-docker/issues/… (це трапляється з пакетами, які мають інтерактивну конфігурацію, де він задає вам запитання - це означає, що інтерактивна конфігурація пропускається, але ви не це навіть не потрібно, і в будь-якому випадку хочуть значення за замовчуванням, тому що ви запускаєте автоматичну установку).
Лео К

Це не завжди є неприйнятним попередженням, воно залежить від конкретного пакета, який ви встановлюєте. Іноді конфігурація необхідна, і вам доведеться або інтерактивно встановити, або знайти якийсь інший спосіб надати їй потрібну конфігурацію.
Ken Williams

47

Після пошуку в Інтернеті я знайшов кілька альтернатив, про які варто згадати, замість того, щоб кожного разу ставити DEBIAN_FRONTEND=noninteractiveперед нимиapt-get install -y {your-pkgs} :

Альтернатива 1: ARG DEBIAN_FRONTEND = неінтерактивна

Інструкція ARG визначає змінну, яку користувачі можуть передавати будівельнику за допомогою команди docker build за допомогою прапорця --build-arg =. (Довідка: [ 6 ])

Характеристики розчину:

  • ARG директива встановлюється лише під час побудови
  • Параметр "неінтерактивний" встановлюється як значення за замовчуванням лише для часу побудови.
  • Оскільки це аргумент, його можна змінити, передавши інше значення для цього аргументу, наприклад docker build --build-arg DEBIAN_FRONTEND=newt

Приклад:

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

Альтернатива 2: на льоту

Це рішення від Лео К.

Характеристики розчину:

  • Його можна встановити там, де це потрібно. Тож хороший дрібнозернистий розчин.
  • Його можна встановити в іншому значенні в певній команді, тому він не встановлюється глобально.
  • Сфера дії - RUNі не впливатиме на інші директиви.

Приклад:

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

Альтернатива 3: ENV DEBIAN_FRONTEND = неінтерактивний

Встановлення ENV DEBIAN_FRONTEND noninteractiveтакож є альтернативою, але це вкрай не рекомендується.

Іншим способом було б встановити на прохання і зняти його в кінці Dockerfile.

Характеристики розчину:

  • ENV директива буде зберігати змінну середовища після побудови (не рекомендується), крім того
  • Це може спричинити помилки, якщо ви забудете повернути його до значення за замовчуванням.
  • Оскільки для нього встановлено ENV, він успадковуватиметься від усіх зображень та вмістів, побудованих із зображення, ефективно змінюючи їх поведінку. (Як згадувалося в [ 1 ]) Люди, які використовують ці зображення, стикаються з проблемами під час інтерактивної інсталяції програмного забезпечення, оскільки інсталятори не відображають діалогових вікон.
  • Типовим інтерфейсом є DEBIAN_FRONTEND=newt(див. [ 2 ], тому його потрібно встановити в кінці файлу.

Приклад:

# 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

Альтернатива 4: RUN експорт DEBIAN_FRONTEND = неінтерактивний

Характеристики розчину:

  • Досить подібний до альтернативи 2
  • Від’єднуючись, страждає згуртованість: чому відбувається експорт цієї змінної та до чого вона належить (apt-get).
  • Сфера дії - RUNі не впливатиме на інші директиви.

Приклад:

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

Більше для читання (посилання)


2
Я використовував "Альтернативу 2: на льоту": дуже чисто і зручно, я вже не маю заплутаних попереджень
herve-guerin

Я вибираю Альтернативу 1 і все одно отримую попередження. Мій Dockerfile починається з, FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractiveі я біжуdocker build --no-cache -t node-10-16-2-plus-chrome .
Marecky
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.