Evitar la interacción del usuario con tzdata al instalar certbot en un contenedor acoplable

108

Quiero instalar certbot en un entorno docker con una imagen de Ubuntu 16.04:

Por ejemplo:

docker run -it ubuntu:16.04 /bin/bash

Cuando estoy dentro del contenedor, la forma más sencilla de instalar certbot no funciona, ya que requiere la intervención del usuario:

apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository -y -u ppa:certbot/certbot && \
apt-get install -y certbot

El problema es tzdataque se detiene con este diálogo interactivo:

Extracting templates from packages: 100%
Preconfiguring packages ...
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

 1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
 2. America     5. Arctic     8. Europe    11. SystemV
 3. Antarctica  6. Asia       9. Indian    12. US
Geographic area: 

Curiosamente, funciona cuando instalo tzdataantes de agregar el ppa:

apt-get update && \
apt-get install -y tzdata && \
apt-get install -y software-properties-common && \
add-apt-repository -y -u ppa:certbot/certbot && \
apt-get install -y certbot

Preguntas:

  • ¿Por qué hace la diferencia si instalo tzdataantes o después de agregar el ppa?
  • ¿Existe un mejor enfoque para evitar el diálogo interactivo al instalar certbot?
Philipp Claßen
fuente
No funciona para mí, desafortunadamente.
Nico Schlömer
66
Posible duplicado de la instalación de un paquete con parámetros que se solicitan en cli
David Foerster

Respuestas:

100

Para ejecutar dpkg(detrás de otras herramientas como Apt) sin diálogo interactivo, puede establecer una variable de entorno como

DEBIAN_FRONTEND=noninteractive

Por ejemplo, puede configurarlo en Dockerfile usando ARG :

ARG DEBIAN_FRONTEND=noninteractive
Aditya Pawaskar
fuente
44
Nota: sudono pasa las variables de entorno en la mayoría de los casos, por lo que sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatafunciona pero DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatano lo hace.
Restablecer Monica
30
Para dockerfiles, agregue esto: ENV DEBIAN_FRONTEND = no interactivo
jersey bean
1
Tuve un caso en el que esto no funcionó en Ubuntu 18.04. Pero la respuesta a continuación lo solucionó en Ubuntu 18.04.
tmanthey
Verifique askubuntu.com/a/1098881/112499 ya que esa respuesta realmente soluciona el problema en lugar de ocultarlo como este.
Sombra
29

En Ubuntu 18.04 hice ese Dockerfile:

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....
Terentev Maksim
fuente
No parecía haber una diferencia para mí cuando probé en EE. UU. / Denver. Tal vez tengo la información tz mal.
Wordsforthewise
13

TL&DR: dentro de su DockerFile

ENV DEBIAN_FRONTEND=noninteractive 

Razón:

Ciertos instaladores facilitan las 'instalaciones' al tener un buen front-end. Si bien esto es excelente cuando tiene una instalación manual, esto se convierte en un problema durante las instalaciones automatizadas.

Puede anular la instalación interactiva colocando lo siguiente en la cadena de su entorno.

Salud

FlyingV
fuente
Convenido; Haciendo cambios. a Suggestiong
FlyingV
4

Puede configurar DEBIAN_FRONTEND=noninteractiveantes de que su comando evite ENV DEBIAN_FRONTEND=noninteractiveafectar los comandos posteriores o la imagen secundaria:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        tzdata \
    && rm -rf /var/lib/apt/lists/*
pyfreyr
fuente