Можно ли ответить на вопросы диалога при установке в 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 59

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 для второй команды.

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

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

ENV DEBIAN_FRONTEND noninteractive У меня не получилось

так же как и ARG DEBIAN_FRONTEND=noninteractive

но RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections сделал