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