Можно ли отвечать на диалоговые вопросы при установке в 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
для второй команды.
ENV DEBIAN_FRONTEND noninteractive
не работал на меня
не ARG DEBIAN_FRONTEND=noninteractive
но
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
сделал