web-dev-qa-db-fra.com

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

Je veux 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, 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: 

Curieusement, 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 que j'installe tzdata avant ou après l'ajout de ppa?
  • Existe-t-il une meilleure approche pour éviter le dialogue interactif lors de l’installation de certbot?
74
Philipp Claßen

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
75
Aditya

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....
20
Terentev Maksim

TL & DR: Dans votre fichier Docker

ENV DEBIAN_FRONTEND=noninteractive 

Raison:

Certains installateurs facilitent les "installations" en ayant une interface Nice. 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é

7
FlyingV

Vous pouvez définir DEBIAN_FRONTEND=noninteractive avant votre commande pour éviter que ENV DEBIAN_FRONTEND=noninteractive affecte 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/*
2
pyfreyr