Vermeiden von Benutzerinteraktionen mit tzdata bei der Installation von certbot in einem Docker-Container

107

Ich möchte certbot in einer Docker-Umgebung mit einem Ubuntu 16.04-Image installieren :

Zum Beispiel:

docker run -it ubuntu:16.04 /bin/bash

Wenn ich mich im Container befinde, funktioniert die einfachste Installation von certbot nicht, da der Benutzer eingreifen muss:

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

Das Problem ist tzdata, welches mit diesem interaktiven Dialog aufhört:

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: 

Seltsamerweise funktioniert es, wenn ich tzdatavor dem Hinzufügen des ppa installiere :

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

Fragen:

  • Warum macht es einen Unterschied, ob ich tzdatavor oder nach dem Hinzufügen des ppa installiere ?
  • Gibt es einen besseren Ansatz, um den interaktiven Dialog bei der Installation von certbot zu vermeiden?
Philipp Claßen
quelle
Funktioniert leider nicht für mich.
Nico Schlömer

Antworten:

100

Um dpkg(hinter anderen Tools wie Apt) ohne interaktiven Dialog zu laufen , können Sie eine Umgebungsvariable als festlegen

DEBIAN_FRONTEND=noninteractive

Zum Beispiel können Sie es in Dockerfile mit ARG einstellen :

ARG DEBIAN_FRONTEND=noninteractive
Aditya Pawaskar
quelle
4
Hinweis: sudoIn den meisten Fällen werden Umgebungsvariablen nicht weitergeleitet, dies sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatafunktioniert jedoch DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatanicht.
Brendan Long
30
Fügen Sie für Andockdateien Folgendes hinzu: ENV DEBIAN_FRONTEND = noninteractive
Jersey Bean
1
Ich hatte einen Fall, in dem dies auf Ubuntu 18.04 nicht funktionierte. Aber unten Antwort hat es auf Ubuntu 18.04 behoben.
27.
28

Unter Ubuntu 18.04 habe ich folgendes Dockerfile erstellt:

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....
Terentev Maksim
quelle
Es schien keinen Unterschied für mich zu machen, als ich US / Denver ausprobierte. Vielleicht habe ich die tz info falsch.
wordsforthewise
13

TL & DR: In Ihrem DockerFile

ENV DEBIAN_FRONTEND=noninteractive 

Grund:

Bestimmte Installer vereinfachen die Installation, indem sie ein nettes Front-End haben. Dies ist zwar hilfreich, wenn Sie eine manuelle Installation haben, wird jedoch bei automatisierten Installationen zu einem Problem.

Sie können die interaktive Installation umgehen, indem Sie Folgendes in Ihre Umgebungszeichenfolge einfügen.

Prost

FlyingV
quelle
Einverstanden; Änderungen machen. zu Suggestiong
FlyingV
4

Sie können DEBIAN_FRONTEND=noninteractivevor Ihrem Befehl Folgendes festlegen , um ENV DEBIAN_FRONTEND=noninteractiveAuswirkungen auf Befehle nach oder untergeordnetes Bild zu vermeiden :

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