Уникаючи взаємодії користувачів з tzdata під час встановлення certbot в докерний контейнер


106

Я хочу встановити 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не працює.
Брендан Довгий

29
Для докерфілів додайте це: ENV DEBIAN_FRONTEND = неінтерактивний
трикотажний боб

1
У мене був випадок, коли це не працювало на Ubuntu 18.04. Але нижче відповідь виправили це на Ubuntu 18.04.
tmanthey

28

У 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....

Здавалося, це не змінило для мене, коли я спробував США / Денвер. Можливо, у мене інформація про tz неправильна.
словазвідки


13

TL&DR: у вашому DockerFile

ENV DEBIAN_FRONTEND=noninteractive 

Причина:

Деякі інсталятори полегшують "встановлення", маючи приємний передній край. Хоча це чудово, коли ви встановлюєте вручну, це стає проблемою під час автоматизованих установок.

Ви можете перейти на інтерактивну інсталяцію, розмістивши наступне у своєму рядку середовища.

Ура



Домовились; Внесення змін. to Suggestiong
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.