当前位置: 首页>>技术教程>>正文


ubuntu – 在docker下安装时可以回答对话框问题吗?

, , ,

问题描述

使用apt-get安装某些软件包时,是否可以以某种方式回答作为对话框出现的问题?

例如,我正在尝试使用以下命令设置包含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

幸运的是,新的ARG指令设置了仅在构建期间存在的变量,因此现在可以使用更优雅的解决方案,该解决方案在DockerFile中指定,但不会在最终图像中持续存在:ARG DEBIAN_FRONTEND=noninteractive

次佳答案

您应该将DEBIAN_FRONTEND = noninteractive设置为envvar。在大多数情况下,这至少会成功实现,因此安装不会出错。

就像@Azdle提到的那样,使用debconf-set-selections将允许您设置特定的项目。

第三种答案

和往常一样,更多的搜索找到了答案。

答案是debconf-set-selections。手册页:http://manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html

要查找可以设置的选项,请在已安装软件包的系统上使用debconf-get-selections。您需要为第二个命令安装debconf-utils

第四种答案

这是可行的解决方案:

ARG DEBIAN_FRONTEND =非交互式

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/9510.html,未经允许,请勿转载。