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?

Infelizmente não está funcionando para mim.
Nico Schlömer

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

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

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



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/*
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.