245 votes

Éviter l'interaction de l'utilisateur avec tzdata lors de l'installation de certbot dans un conteneur docker

Je veux installer certbot dans un environnement docker avec une image Ubuntu 16.04 :

Par exemple :

docker run -it ubuntu:16.04 /bin/bash

Lorsque je suis à l'intérieur du conteneur, la manière la plus simple d'installer certbot ne fonctionne pas car elle nécessite l'intervention de l'utilisateur :

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

Le problème est que tzdata qui s'arrête avec ce dialogue interactif :

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: 

Bizarrement, cela fonctionne lorsque j'installe tzdata avant d'ajouter le 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

Questions :

  • Pourquoi cela fait-il une différence si j'installe tzdata avant ou après avoir ajouté le ppa ?
  • Existe-t-il une meilleure approche pour éviter le dialogue interactif lors de l'installation de certbot ?

297voto

Aditya Pawaskar Points 3102

Pour exécuter dpkg (derrière d'autres outils comme Apt) sans dialogue interactif, vous pouvez définir une variable d'environnement comme

DEBIAN_FRONTEND=noninteractive

Par exemple, vous pouvez le définir dans Dockerfile en utilisant ARG :

ARG DEBIAN_FRONTEND=noninteractive

88voto

Terentev Maksim Points 1117

Sur Ubuntu 18.04 j'ai fait cela Dockerfile :

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....

66voto

FlyingV Points 769

TL&DR : Dans votre DockerFile

ENV DEBIAN_FRONTEND=noninteractive 

Raison :

Certains installateurs facilitent les "installations" en offrant une interface agréable. Si c'est une bonne chose pour une installation manuelle, cela devient un problème pour les installations automatisées.

Vous pouvez contourner l'installation interactive en plaçant ce qui suit dans votre chaîne d'environnement.

Cheers

25voto

pyfreyr Points 351

Vous pouvez définir DEBIAN_FRONTEND=noninteractive avant votre commande pour éviter ENV DEBIAN_FRONTEND=noninteractive affecte les commandes après ou l'image enfant :

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

10voto

James Bond Points 491

Vous devriez juste régler votre fuseau horaire AVANT l'installation de tzdata :

# Set timezone:
RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone

# Install dependencies:
RUN apt-get update && apt-get install -y tzdata

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X