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?

No funciona para mí, desafortunadamente.
Nico Schlömer

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

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....

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



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/*
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.