Возможно ли ответить на вопросы диалога при установке в докере?
Можно ли как-то ответить на вопросы, которые представлены в виде диалогов при установке некоторых пакетов с помощью 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:
Из того, что я понимаю, просто просто не могу ответить на диалоги, но есть ли способ передать параметр для ответа на каждый вопрос заранее? Я знаю, что это просто меняет некоторые конфигурации, поэтому я мог бы сделать это после факта, но, по-видимому, лучше позволить сценариям установки сделать это, чтобы все было правильно настроено.
Ответы
Ответ 1
См. обсуждение здесь: 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
.
Ответ 2
Вы должны установить DEBIAN_FRONTEND = неинтерактивный как envvar. В большинстве случаев это, по крайней мере, сделает так, чтобы установка не выходила из строя.
Также как упоминалось @Azdle, использование параметров debconf-set позволит вам установить определенные элементы.
Ответ 3
Как обычно, поиски нашли немного больше.
Ответ debconf-set-selections
. Manpage: http://manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html
Чтобы найти параметры, которые можно установить, используйте debconf-get-selections
в системе, на которой уже установлен пакет. Вам потребуется установить debconf-utils
для второй команды.
Ответ 4
Это рабочее решение:
ARG DEBIAN_FRONTEND = неинтерактивный