在docker下安装时是否可以回答对话框问题?

时间:2014-03-17 21:52:06

标签: ubuntu installation docker apt-get

使用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: 

根据我的理解,我只是无法回应对话框,但是有什么方法可以提前通过参数来回答每个问题吗?我知道它只是改变了一些配置,所以我可以在事后做到这一点,但可能最好让安装脚本做到这一点,以便所有设置都正确。

6 个答案:

答案 0 :(得分:63)

请参阅此处的讨论: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

答案 1 :(得分:25)

你应该将DEBIAN_FRONTEND = noninteractive设置为envvar。在大多数情况下,这至少会使安装不会出错。

同样如@Azdle所述,使用debconf-set-selections将允许您设置特定项目。

答案 2 :(得分:14)

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

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

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

答案 3 :(得分:5)

这是有效的解决方案:

ARG DEBIAN_FRONTEND =非交互式

答案 4 :(得分:2)

ENV DEBIAN_FRONTEND noninteractive对我不起作用

ARG DEBIAN_FRONTEND=noninteractive

都没有

但是 RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections做过

答案 5 :(得分:1)

成功范例:

echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
sudo apt-get install -y -q <package name>