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?

Ne travaille pas pour moi, malheureusement.
Nico Schlömer

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

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

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é



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/*
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.