Можно ли как-то ответить на вопросы, которые представлены в виде диалогов при установке некоторых пакетов с помощью 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:
Из того, что я понимаю, просто просто не могу ответить на диалоги, но есть ли способ передать параметр для ответа на каждый вопрос заранее? Я знаю, что это просто меняет некоторые конфигурации, поэтому я мог бы сделать это после факта, но, по-видимому, лучше позволить сценариям установки сделать это, чтобы все было правильно настроено.
См. обсуждение здесь: 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 позволит вам установить определенные элементы.
Как обычно, поиски нашли немного больше.
Ответ 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 = неинтерактивный
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 пропускается приглашение