Unikanie interakcji użytkownika z tzdata podczas instalowania certbota w kontenerze dokera

105

Chcę zainstalować certbota w środowisku dokera z obrazem Ubuntu 16.04:

Na przykład:

docker run -it ubuntu:16.04 /bin/bash

Kiedy jestem w kontenerze, najprostszy sposób na zainstalowanie certbota nie działa, ponieważ wymaga interwencji użytkownika:

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

Problem polega na tym tzdata, że kończy się to interaktywne okno dialogowe:

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: 

O dziwo, działa gdy instaluję tzdataprzed dodaniem 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

Pytania:

  • Dlaczego robi to różnicę, czy instaluję tzdataprzed czy po dodaniu ppa?
  • Czy istnieje lepsze podejście do unikania interaktywnego okna dialogowego podczas instalowania certbota?
Philipp Claßen
źródło
Niestety dla mnie nie działa.
Nico Schlömer
6
Możliwy duplikat instalacji pakietu z pytaniem o parametry na cli
David Foerster

Odpowiedzi:

100

Aby uruchomić dpkg(za innymi narzędziami, takimi jak Apt) bez interaktywnego dialogu, możesz ustawić jedną zmienną środowiskową jako

DEBIAN_FRONTEND=noninteractive

Na przykład możesz ustawić go w Dockerfile za pomocą ARG :

ARG DEBIAN_FRONTEND=noninteractive
Aditya Pawaskar
źródło
4
Uwaga: sudow większości przypadków nie przepuszcza zmiennych środowiskowych, więc sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatadziała, ale DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatanie.
Brendan Long
29
W przypadku plików dokowanych dodaj to: ENV DEBIAN_FRONTEND = nieinteraktywna
fasola z
1
Miałem przypadek, w którym nie działało to na Ubuntu 18.04. Ale poniżej odpowiedź naprawiła to na Ubuntu 18.04.
tmanthey
28

Na Ubuntu 18.04 zrobiłem ten plik Docker:

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....
Terentev Maksim
źródło
Wydawało się, że nie ma to dla mnie znaczenia, kiedy próbowałem US / Denver. Może mam nieprawidłowe informacje o tz.
słowa
13

TL&DR: w twoim pliku Docker

ENV DEBIAN_FRONTEND=noninteractive 

Powód:

Niektórzy instalatorzy ułatwiają „instalacje” dzięki ładnemu interfejsowi. Chociaż jest to świetne, gdy masz instalację ręczną, staje się to problemem podczas instalacji automatycznych.

Możesz przejechać instalację interaktywną, umieszczając następujące elementy w łańcuchu środowiska.

Twoje zdrowie

FlyingV
źródło
4

Możesz ustawić DEBIAN_FRONTEND=noninteractiveprzed poleceniem, aby unikać ENV DEBIAN_FRONTEND=noninteractivewpływania na polecenia po lub obraz podrzędny:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        tzdata \
    && rm -rf /var/lib/apt/lists/*
pyfreyr
źródło