Предотвращение взаимодействия пользователя с tzdata при установке certbot в Docker-контейнере

108

Я хочу установить certbot в среде докера с образом Ubuntu 16.04:

Например:

docker run -it ubuntu:16.04 /bin/bash

Когда я нахожусь внутри контейнера, самый простой способ установить certbot не работает, так как требует вмешательства пользователя:

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

Проблема в том tzdata, что останавливается в этом интерактивном диалоге:

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: 

Как ни странно, это работает, когда я устанавливаю tzdataперед добавлением 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

Вопросов:

  • Почему имеет значение, установить ли я tzdataдо или после добавления ppa?
  • Есть ли лучший способ избежать интерактивного диалога при установке certbot?
Филипп Классен
источник
К сожалению, не работает для меня.
Нико Шлёмер

Ответы:

100

Чтобы запустить dpkg(за другими инструментами, такими как Apt) без интерактивного диалога, вы можете установить одну переменную среды как

DEBIAN_FRONTEND=noninteractive

Например, вы можете установить его в Dockerfile, используя ARG :

ARG DEBIAN_FRONTEND=noninteractive
Адитья Паваскар
источник
4
Примечание: sudoв большинстве случаев не передает переменные окружения, поэтому sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdataработает, но DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdataне проходит.
Восстановить Монику
30
Для докер-файлов добавьте следующее: ENV DEBIAN_FRONTEND = неинтерактивно
боб-майка
1
У меня был случай, когда это не сработало на Ubuntu 18.04. Но ниже ответ исправил это на Ubuntu 18.04.
tmanthey
Проверьте askubuntu.com/a/1098881/112499, так как этот ответ фактически устраняет проблему, а не скрывает ее, как этот.
Тень
29

На Ubuntu 18.04 я сделал этот Dockerfile:

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....
Терентьев Максим
источник
Похоже, для меня это не имело значения, когда я попробовал США / Денвер. Может быть, у меня неправильная информация о ТЗ.
словами
13

TL & DR: в вашем DockerFile

ENV DEBIAN_FRONTEND=noninteractive 

Причина:

Некоторые установщики облегчают «установку», имея хороший внешний интерфейс. Хотя это замечательно, если у вас есть ручная установка, это становится проблемой при автоматической установке.

Вы можете переопределить интерактивную установку, поместив следующую строку в строку окружения.

ура

FlyingV
источник
Согласовано; Вносить изменения. на предложение
FlyingV
4

Вы можете установить DEBIAN_FRONTEND=noninteractiveперед вашей командой, чтобы избежать ENV DEBIAN_FRONTEND=noninteractiveвлияния команд после или дочернего изображения:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        tzdata \
    && rm -rf /var/lib/apt/lists/*
pyfreyr
источник