使用apt-get安装某些软件包时,是否可以以某种方式回答出现在对话框中的问题?
例如,我正在尝试设置包含以下内容的mail-stack-delivery软件包的容器:
mail-stack-delivery
FROM ubuntu RUN apt-get install -y mail-stack-delivery
但是,在构建时,dockerfile会产生许多错误,这些错误包括:
debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dialog frontend is not usable.) debconf: falling back to frontend: Readline debconf: unable to initialize frontend: Readline debconf: (Can't locate Term/ReadLine.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, <> line 11.) debconf: falling back to frontend: Teletype dpkg-preconfigure: unable to re-open stdin:
据我了解,我只是无法响应对话框,但是是否可以通过某种方式提前传递参数来回答每个问题?我知道它只是在更改某些配置,因此事后我可以这样做,但是大概最好让安装脚本来执行此操作,以便正确设置所有内容。
请参阅此处的讨论:https : //github.com/docker/docker/issues/4032。简而言之,ENV DEBIAN_FRONTEND noninteractive不建议使用设置,因为设置会保留在最终图像中,即使运行时也是如此docker run -i -t ... bash。因此,建议要么忽略DEBIAN_FRONTEND并保留警告,要么为每个命令明确指定警告,例如RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package。
ENV DEBIAN_FRONTEND noninteractive
docker run -i -t ... bash
DEBIAN_FRONTEND
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package
幸运的是,新ARG指令设置了仅在构建期间有效的变量,因此现在有可能提供一种更优雅的解决方案,该解决方案已在中指定,DockerFile但并未保留在最终映像中: ARG DEBIAN_FRONTEND=noninteractive 。
ARG
DockerFile
ARG DEBIAN_FRONTEND=noninteractive