Eviter les interactions de l'utilisateur avec tzdata lors de l'installation de certbot dans un conteneur Docker

108

Je souhaite installer certbot dans un environnement de menu fixe avec une image Ubuntu 16.04:

Par exemple:

docker run -it ubuntu:16.04 /bin/bash

Lorsque je suis dans le conteneur, le moyen le plus simple d'installer certbot ne fonctionne pas car il 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 tzdata, ce 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: 

Étrangement, cela fonctionne lorsque tzdataj'installe 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

Des questions:

  • Pourquoi cela fait-il une différence si tzdataj'installe avant ou après l'ajout du ppa?
  • Existe-t-il une meilleure approche pour éviter le dialogue interactif lors de l’installation de certbot?
Philipp Claßen
la source
Ne travaille pas pour moi, malheureusement.
Nico Schlömer
6
Duplication possible de l’ installation d’un paquet contenant des paramètres
David Foerster

Réponses:

100

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

DEBIAN_FRONTEND=noninteractive

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

ARG DEBIAN_FRONTEND=noninteractive
Aditya Pawaskar
la source
4
Remarque: sudodans la plupart des cas, les variables d'environnement ne sont pas transmises. Cela sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatafonctionne mais DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatane fonctionne pas.
Rétablir Monica
30
Pour dockerfiles, ajoutez ceci: ENV DEBIAN_FRONTEND = non interactif
haricot jersey
1
J'ai eu un cas où cela ne fonctionnait pas sur Ubuntu 18.04. Mais la réponse ci-dessous a résolu le problème sous Ubuntu 18.04.
tmanthey le
Vérifiez askubuntu.com/a/1098881/112499 car cette réponse corrige le problème au lieu de le masquer comme celui-ci.
Shadow
29

Sur Ubuntu 18.04, j'ai créé ce fichier 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
la source
Cela n'a pas semblé faire une différence pour moi lorsque j'ai essayé US / Denver. Peut-être que j'ai mal l'information sur tz.
wordsforthewise
13

TL & DR: dans votre fichier Docker

ENV DEBIAN_FRONTEND=noninteractive 

Raison:

Certains installateurs facilitent les "installations" en ayant un front-end agréable. Bien que ce soit formidable lorsque vous effectuez une installation manuelle, cela devient un problème lors des installations automatisées.

Vous pouvez surpasser l'installation interactive en plaçant les éléments suivants dans votre chaîne d'environnement.

À votre santé

VolerV
la source
D'accord; Faire des changements. to Suggestiong
FlyingV
4

Vous pouvez définir DEBIAN_FRONTEND=noninteractiveavant votre commande pour éviter d’ ENV DEBIAN_FRONTEND=noninteractiveaffecter les commandes après ou une image enfant:

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