Избежание взаимодействия пользователя с tzdata при установке certbot в контейнере docker

Я хочу установить certbot в среде docker с изображением 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 configurationquestions will narrow this down by presenting a list of cities, representingthe 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. USGeographic 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?

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

DEBIAN_FRONTEND=noninteractive

Например, вы можете установить его в Dockerfile с помощью АРГУМЕНТ:

ARG DEBIAN_FRONTEND=noninteractive

В Ubuntu 18.04 я сделал этот файл Dockerfile:

ENV TZ=Europe/MinskRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN 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

Возможный дубликат Установка пакета с параметрами, запрашиваемыми на cli