我想在具有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: 


奇怪的是,当我在添加ppa之前安装tzdata时,它可以正常工作:

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


问题:


为什么在添加ppa之前或之后安装tzdata会有所不同?
在安装certbot时是否有更好的方法避免交互对话框?


评论

在cli
上提示参数的软件包安装的可能重复项

#1 楼

要运行dpkg(在Apt等其他工具之后)而不进行交互式对话,可以将一个环境变量设置为

DEBIAN_FRONTEND=noninteractive


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

ARG DEBIAN_FRONTEND=noninteractive


评论


注意:sudo在大多数情况下不会传递环境变量,因此sudo DEBIAN_FRONTEND =非交互式sudo apt-get install -y tzdata有效,但是DEBIAN_FRONTEND =非交互式sudo apt-get install -y tzdata不起作用。

–布伦丹·朗(Brendan Long)
18年3月21日在0:00

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

–泽西豆
18/12/26在2:19



我遇到了在Ubuntu 18.04上无法使用的情况。但是下面的答案确实在Ubuntu 18.04上修复了它。

– tmanthey
19年1月27日在19:42



请查看askubuntu.com/a/1098881/112499,因为该答案实际上可以解决问题,而不是像这样隐藏它。

–阴影
19-10-20在23:10

不鼓励使用@jerseybean这种方法,如此处所述:github.com/moby/moby/issues/4032

–明仁
20 Mar 5 '20 at 12:25

#2 楼

在Ubuntu 18.04上我做到了

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....


评论


当我尝试美国/丹佛时,似乎对我没有影响。也许我的tz信息有误。

–明智的话
19年5月14日在20:54

“环境持久性可能导致意外的副作用。要为单个命令设置值,请使用RUN <键> = <值> <命令>。”您也可以尝试ARG。

– MihaiCapotă
19年6月18日在16:33

#3 楼

TL&DR:
在DockerFile中

ENV DEBIAN_FRONTEND=noninteractive 


原因:

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

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

干杯

评论


Docker“最佳实践是不使用ENV,因为这会使env-var保留在最终映像中”。

– MihaiCapotă
19年6月18日在16:30

#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/*