在docker容器中安装certbot时避免用户与tzdata交互


105

我想在具有Ubuntu 16.04映像的docker环境中安装certbot

例如:

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时,是否有更好的方法避免交互对话框?

不幸的是,它不为我工作。
NicoSchlömer18年

Answers:


100

要在dpkg没有交互对话的情况下运行(在Apt等其他工具之后),您可以将一个环境变量设置为

DEBIAN_FRONTEND=noninteractive

例如,您可以使用ARG在Dockerfile中进行设置:

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不能通过。
布伦丹(Brendan)

29
对于dockerfile,添加以下内容:ENV DEBIAN_FRONTEND = noninteractive
jersey Bean

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信息有误。
wordforthewise


13

TL&DR: 在您的DockerFile中

ENV DEBIAN_FRONTEND=noninteractive 

原因:

某些安装程序具有不错的前端,使“安装”更加容易。当您进行手动安装时,这很棒,但是在自动安装过程中,这成为一个问题。

您可以通过在环境字符串中放置以下内容来替代交互式安装。

干杯



同意;进行更改。建议
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/*
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.