Докер имеет проблемы с установкой 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
Что вызывает это и как я могу это исправить? Спасибо!
Ответы
Ответ 1
На самом деле это не ошибка, и ее можно игнорировать. Я собрал большое количество образов контейнеров, на которых никогда не было apt-utils, и независимо от этого предупреждения все установки пакетов проходят и работают нормально.
В любом случае, если вы хотите иметь apt-utils - установите его. Он выдаст вам это предупреждение один раз, а затем исчезнет для будущих вызовов apt-get (как вы можете видеть в своем собственном журнале, curl
был установлен без этого сообщения).
ЗАМЕЧАНИЕ: если вы установите apt-utils, вы получите другие предупреждения (потому что теперь установщик может запустить интерактивную конфигурацию и попытается это сделать, но не получится). Чтобы подавить их и иметь пакеты, которые имеют интерактивный конфиг с их настройками по умолчанию, запустите apt-get, как это DEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....
Ответ 2
После поиска в Интернете я нашел несколько альтернатив, достойных упоминания, вместо того, чтобы каждый раз помещать DEBIAN_FRONTEND=noninteractive
перед apt-get install -y {your-pkgs}
:
Альтернатива 1: ARG DEBIAN_FRONTEND = неинтерактивный
Инструкция ARG определяет переменную, которую пользователи могут передавать во время сборки сборщику с помощью команды сборки docker с использованием флага --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 export 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} && \
...
Больше читать (ссылки)