例如:
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时是否有更好的方法避免交互对话框?
#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/*
评论
在cli上提示参数的软件包安装的可能重复项