Docker: проблемы с установкой apt-utils

Я пытаюсь установить apt-utils на Docker, потому что, когда я просто делал 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

Что вызывает это и как я могу это исправить? Спасибо!

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
147
0
109 119
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

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

В любом случае, если вы хотите иметь apt-utils - установите его. Он выдаст вам это предупреждение однажды, а затем исчезнет для будущих вызовов apt-get (как вы можете видеть в своем собственном журнале, curl был установлен без этого сообщения).

ПРИМЕЧАНИЕ, если вы установите apt-utils, вы получите другие предупреждения (потому что теперь установщик может запускает интерактивную конфигурацию и попытается это сделать, но потерпит неудачу). Чтобы подавить их и иметь пакеты, которые имеют интерактивную конфигурацию со своими значениями по умолчанию, запустите apt-get, как это DEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....

Не могли бы вы дать ссылку на комментарий «это безопасно игнорировать»?

Zak 01.01.2019 14:33

Это известное предупреждение, см., Например, здесь: github.com/phusion/baseimage-docker/issues/… (это происходит с пакетами, у которых есть интерактивная конфигурация, где он задает вам вопросы - это означает, что интерактивная конфигурация пропускается, но вам это даже не нужно, и вам все равно нужны значения по умолчанию, потому что вы запускаете автоматическую установку).

Leo K 02.01.2019 16:56

Это не всегда игнорируемое предупреждение, оно зависит от конкретного пакета, который вы устанавливаете. Иногда конфигурация необходима, и вам придется либо выполнить интерактивную установку, либо найти другой способ предоставить ей необходимую конфигурацию.

Ken Williams 08.02.2020 21:31

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

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

The ARG instruction defines a variable that users can pass at build-time to the builder with the docker build command using the --build-arg = flag. (Reference: [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: ВЫПОЛНИТЬ экспорт DEBIAN_FRONTEND = noninteractive

Характеристики решения:

  • Очень похоже на альтернатива 2
  • Из-за разделения страдает сплоченность: почему существует экспорт этой переменной и чему она принадлежит (apt-get).
  • Область действия - RUN и не влияет на другие директивы.

Пример:

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

Больше читать (ссылки)

Я использовал «Альтернатива 2: На лету»: очень чисто и удобно, у меня больше нет сбивающих с толку предупреждений

herve-guerin 28.03.2020 19:26

Я выбираю Альтернативу 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 14.10.2020 15:11

Обратите внимание: вариант 1 работать не будет! Поскольку аргументы сборки интерпретируются в Dockerfile только при ссылке на них со знаком доллара. Аргументы сборки - это не то же самое, что переменные среды, и аргументы не будут распространяться на уровень выполнения (в отличие от переменных env).

Andrey Volkov 24.04.2021 21:46

Это постоянная проблема, у которой нет отличного решения ... Я пошел с этим, это неоптимально, но работает:

ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y apt-utils 2>&1 | \
    grep -v "^debconf: delaying package configuration, since apt-utils.*"

Объяснение:

  • grep -v обратные совпадения, строки, начинающиеся с этого, исчезнут!
  • ARG - это новый ENV, если он вам не нужен во время выполнения.
  • Затем мы можем использовать apt-get весь день без появления этой ошибки при создании изображения с нуля.

Доказательство того, что это работает: https://asciinema.org/a/WJCDEYcxCIy6EF7eXw0MAnK3c

это не исправление и не "лучший вариант". Вы просто визуально отфильтровываете ошибку, тем самым загромождая свой Dockerfile только из-за эстетики.

dfherr 29.05.2021 21:11

@dfherr Под лучшим вариантом я не имел в виду хорошее. Я заменил это словом «неоптимально», чтобы уточнить. Это подтверждает и отклоняет предупреждение. Это функционально, так как вы получаете реальное состояние и повышает доступность серьезных ошибок.

Ray Foss 09.06.2021 19:36

Другие вопросы по теме