Предотвращение взаимодействия пользователя с 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

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/*
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.