ubuntu - regular - ¿Es posible contestar preguntas de diálogo cuando se instala en Docker?
ubuntu medium free (4)
¿Es posible responder de alguna manera a las preguntas que se presentan como diálogos al instalar algunos paquetes usando apt-get?
Por ejemplo, estoy tratando de configurar un contenedor que contiene el mail-stack-delivery
con:
FROM ubuntu
RUN apt-get install -y mail-stack-delivery
Sin embargo, ese dockerfile genera docenas de errores cuando se construyen que están en la línea de:
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:
Por lo que entiendo, simplemente no puedo responder a los diálogos, pero ¿hay alguna forma de que pueda pasar un parámetro para responder cada pregunta con anticipación? Sé que solo está cambiando algunas configuraciones, así que podría hacerlo después del hecho, pero presumiblemente es mejor dejar que las secuencias de comandos de instalación lo hagan para que todo se configure correctamente.
Como de costumbre, un poco más de búsqueda encontró la respuesta.
La respuesta es debconf-set-selections
. Manpage: http://manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html
Para encontrar las opciones que se pueden establecer, use debconf-get-selections
en un sistema que ya tenga el paquete instalado. Deberá instalar debconf-utils
para el segundo comando.
Debes establecer DEBIAN_FRONTEND = no interactivo como un envvar. En la mayoría de los casos, al menos esto hará que la instalación no se equivoque.
También como se mencionó en @Azdle, el uso de debconf-set-selections te permitirá configurar elementos específicos.
Esta es una solución de trabajo:
ARG DEBIAN_FRONTEND = no interactivo
Vea la discusión aquí: https://github.com/docker/docker/issues/4032 . En resumen, ENV DEBIAN_FRONTEND noninteractive
se recomienda configurar ENV DEBIAN_FRONTEND noninteractive
ya que persiste en la imagen final, incluso cuando se ejecuta algo como docker run -i -t ... bash
. Por lo tanto, se recomienda omitir DEBIAN_FRONTEND
y vivir con la advertencia, o especificarlo explícitamente para cada comando, por ejemplo RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package
.
Afortunadamente, la nueva directiva ARG
establece variables que solo viven durante la construcción, por lo que ahora es posible una solución más elegante que está especificada en DockerFile
pero que no persiste en la imagen final: ARG DEBIAN_FRONTEND=noninteractive
.