Evitando a interação do usuário com tzdata ao instalar o certbot em um contêiner de docker

108

Quero instalar o certbot em um ambiente docker com uma imagem do Ubuntu 16.04:

Por exemplo:

docker run -it ubuntu:16.04 /bin/bash

Quando estou dentro do contêiner, a maneira mais direta de instalar o certbot não funciona, pois requer intervenção do usuário:

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

O problema é tzdataque para com este diálogo interativo:

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: 

Curiosamente, ele funciona quando eu instalo tzdataantes de adicionar o 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

Questões:

  • Por que faz diferença se eu instalo tzdataantes ou depois de adicionar o ppa?
  • Existe uma abordagem melhor para evitar o diálogo interativo ao instalar o certbot?
Philipp Claßen
fonte
Infelizmente não está funcionando para mim.
Nico Schlömer
6
Possível duplicado de instalação de um pacote com parâmetros ser solicitado em cli
David Foerster

Respostas:

100

Para executar dpkg(atrás de outras ferramentas como o Apt) sem diálogo interativo, você pode definir uma variável de ambiente como

DEBIAN_FRONTEND=noninteractive

Por exemplo, você pode configurá-lo no Dockerfile usando ARG :

ARG DEBIAN_FRONTEND=noninteractive
Aditya Pawaskar
fonte
4
Nota: sudona maioria dos casos, não passa variáveis ​​de ambiente, por isso sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatafunciona, mas DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatanão passa .
Brendan Long
30
Para arquivos docker, adicione: ENV DEBIAN_FRONTEND = noninteractive
jersey bean
1
Eu tive um caso em que isso não funcionou no Ubuntu 18.04. Mas a resposta abaixo corrigiu o problema no Ubuntu 18.04.
tmanthey 27/01
Verifique askubuntu.com/a/1098881/112499, pois essa resposta realmente corrige o problema em vez de ocultá- lo como este.
Shadow
29

No Ubuntu 18.04, fiz o 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
fonte
Não pareceu fazer a diferença para mim quando tentei EUA / Denver. Talvez eu esteja com a informação tz errada.
wordsforthewise
13

TL&DR: no DockerFile

ENV DEBIAN_FRONTEND=noninteractive 

Razão, motivo:

Certos instaladores facilitam as 'instalações' com um bom front-end. Embora isso seja ótimo quando você tem uma instalação manual, isso se torna um problema durante as instalações automatizadas.

Você pode acompanhar a instalação interativa colocando o seguinte em sua cadeia de ambiente.

Felicidades

FlyingV
fonte
Acordado; Fazendo mudanças. para Suggestiong
FlyingV
4

Você pode definir DEBIAN_FRONTEND=noninteractiveantes do seu comando para evitar que ENV DEBIAN_FRONTEND=noninteractiveos comandos afetem ou a imagem filho:

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