Можно ли ответить на вопросы диалога при установке в Docker?

54

Можно ли как-то ответить на вопросы, которые представлены в виде диалогов при установке некоторых пакетов с помощью apt-get?

Например, я пытаюсь настроить контейнер, содержащий пакет mail-stack-delivery, с помощью:

FROM ubuntu

RUN apt-get install -y mail-stack-delivery

Однако этот dockerfile генерирует десятки ошибок при построении, которые расположены вдоль строк:

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, <> line 11.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin: 

Из того, что я понимаю, просто просто не могу ответить на диалоги, но есть ли способ передать параметр для ответа на каждый вопрос заранее? Я знаю, что это просто меняет некоторые конфигурации, поэтому я мог бы сделать это после факта, но, по-видимому, лучше позволить сценариям установки сделать это, чтобы все было правильно настроено.

Теги:
installation
docker
apt-get

4 ответа

33
Лучший ответ

См. обсуждение здесь: https://github.com/docker/docker/issues/4032. Короче говоря, настройка ENV DEBIAN_FRONTEND noninteractive не рекомендуется, так как она сохраняется в конечном изображении, даже если вы запускаете что-то вроде docker run -i -t ... bash. Поэтому рекомендуется либо опустить DEBIAN_FRONTEND и жить с предупреждением, либо указать его явно для каждой команды, например. RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package.

К счастью, новая директива ARG устанавливает переменные, которые живут только во время сборки, поэтому теперь возможно более элегантное решение, которое указано в DockerFile, но не сохраняется в конечном изображении: ARG DEBIAN_FRONTEND=noninteractive.

  • 0
    У меня было RUN apt-get -y -qq install python-pip php-mbstring php-bcmath который останавливал создание моего dockerfile при появлении сообщения с A new version (/usr/lib/php/7.0/php.ini-production.cli) of configuration file /etc/php/7.0/cli/php.ini is available, but the version installed currently has been locally modified .... What do you want to do about modified configuration file php.ini . .. 1. install the new version, 2. keep the local version .... При добавлении этого env var пропускается приглашение
24

Вы должны установить DEBIAN_FRONTEND = неинтерактивный как envvar. В большинстве случаев это, по крайней мере, сделает так, чтобы установка не выходила из строя.

Также как упоминалось @Azdle, использование параметров debconf-set позволит вам установить определенные элементы.

10

Как обычно, поиски нашли немного больше.

Ответ debconf-set-selections. Manpage: http://manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html

Чтобы найти параметры, которые можно установить, используйте debconf-get-selections в системе, на которой уже установлен пакет. Вам потребуется установить debconf-utils для второй команды.

0

Это рабочее решение:

ARG DEBIAN_FRONTEND = неинтерактивный

  • 2
    Не могли бы вы объяснить свой ответ? Например, почему это работает, в чем проблема и т. Д.
  • 0
    Конечно. У меня такая же проблема. Я попытался добавить "RUN DEBIAN_FRONTEND = неинтерактивная установка apt-get", но получил ту же ошибку. Если я добавлю «RUN DEBIAN_FRONTEND = noninteractive» ко всем командам apt-get, то все будет работать нормально. После этого я добавил «ARG DEBIAN_FRONTEND = неинтерактивный», и это работает как шарм! Извините за мой ответ, я новичок здесь. Я могу удалить это :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню