Предотвращение взаимодействия пользователя с tzdata при установке certbot в Docker-контейнере
Я хочу установить 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?
5 ответов
Бежать dpkg
(за другими инструментами, такими как Apt) без интерактивного диалога вы можете установить одну переменную среды как
DEBIAN_FRONTEND=noninteractive
На 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....
TL&DR: в вашем DockerFile
ENV DEBIAN_FRONTEND=noninteractive
Причина:
Некоторые установщики облегчают "установку", имея хороший внешний интерфейс. Хотя это замечательно, если у вас есть ручная установка, это становится проблемой при автоматической установке.
Вы можете переопределить интерактивную установку, поместив следующую строку в строку окружения.
ура
Вы можете установить 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/*
Вы должны просто установить свой часовой пояс ПЕРЕД установкой
tzdata
:
# Set timezone:
RUN ln -snf /usr/share/zoneinfo/$CONTAINER_TIMEZONE /etc/localtime && echo $CONTAINER_TIMEZONE > /etc/timezone
# Install dependencies:
RUN apt-get update && apt-get install -y tzdata