Menghindari interaksi pengguna dengan tzdata saat memasang certbot dalam wadah buruh pelabuhan

108

Saya ingin menginstal certbot di lingkungan buruh pelabuhan dengan gambar Ubuntu 16.04:

Sebagai contoh:

docker run -it ubuntu:16.04 /bin/bash

Ketika saya berada di dalam wadah, cara paling mudah untuk menginstal certbot tidak berfungsi karena memerlukan intervensi pengguna:

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

Masalahnya adalah tzdata, yang berhenti dengan dialog interaktif ini:

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: 

Anehnya, itu berfungsi ketika saya menginstal tzdatasebelum menambahkan 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

Pertanyaan:

  • Mengapa membuat perbedaan apakah saya menginstal tzdatasebelum atau setelah menambahkan ppa?
  • Apakah ada pendekatan yang lebih baik untuk menghindari dialog interaktif saat memasang certbot?
Philipp Claßen
sumber
Sayangnya, tidak bekerja untuk saya.
Nico Schlömer
6
Kemungkinan rangkap dari Instalasi paket dengan parameter yang diminta pada cli
David Foerster

Jawaban:

100

Untuk menjalankan dpkg(di belakang alat lain seperti Apt) tanpa dialog interaktif, Anda dapat menetapkan satu variabel lingkungan sebagai

DEBIAN_FRONTEND=noninteractive

Misalnya, Anda dapat mengaturnya di Dockerfile menggunakan ARG :

ARG DEBIAN_FRONTEND=noninteractive
Aditya Pawaskar
sumber
4
Catatan: sudotidak melewati variabel lingkungan melalui sebagian besar kasus, jadi sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdataberfungsi tetapi DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatatidak.
Brendan Long
30
Untuk dockerfiles, tambahkan ini: ENV DEBIAN_FRONTEND = noninteractive
jersey jersey
1
Saya punya kasus di mana ini tidak berfungsi di Ubuntu 18.04. Tetapi jawaban di bawah ini memang memperbaikinya pada Ubuntu 18.04.
tmanthey
Periksa askubuntu.com/a/1098881/112499 karena jawaban itu benar-benar memperbaiki masalah alih-alih menyembunyikannya seperti ini.
Bayangan
29

Di Ubuntu 18.04 saya melakukan itu Dockerfile:

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....
Terentev Maksim
sumber
Sepertinya tidak membuat perbedaan bagi saya ketika saya mencoba US / Denver. Mungkin saya salah tz info.
kata
13

TL&DR: Di dalam DockerFile Anda

ENV DEBIAN_FRONTEND=noninteractive 

Alasan:

Installer tertentu membuat 'instalasi' lebih mudah dengan memiliki front-end yang bagus. Meskipun ini hebat ketika Anda memiliki instalasi manual, ini menjadi masalah selama instalasi otomatis.

Anda dapat menggunakan instalasi interaktif dengan menempatkan berikut ini di string lingkungan Anda.

Tepuk tangan

FlyingV
sumber
Sepakat; Membuat perubahan. to Suggestiong
FlyingV
4

Anda dapat mengatur DEBIAN_FRONTEND=noninteractivesebelum perintah Anda untuk menghindari ENV DEBIAN_FRONTEND=noninteractivememengaruhi perintah setelah atau gambar anak:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        tzdata \
    && rm -rf /var/lib/apt/lists/*
pyfreyr
sumber