在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:
从我的理解我只是简单地不能回应对话,但有什么办法可以通过参数来提前回答每个问题? 我知道这只是改变一些configuration,所以我可以做到这一点,但大概是让安装脚本这样做,所以一切正常。
请参阅此处的讨论: https : //github.com/docker/docker/issues/4032 。 简而言之,不build议将ENV DEBIAN_FRONTEND noninteractive
设置ENV DEBIAN_FRONTEND noninteractive
因为它仍然存在于最终映像中,即使运行诸如docker run -i -t ... bash
。 因此,build议要么省略DEBIAN_FRONTEND
,要么处于警告状态,要么为每个命令显式指定,例如RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package
。
幸运的是,新的ARG
指令设置了只在构build过程中生存的variables,因此现在可以在DockerFile
指定更优雅的解决scheme,但不会保留在最终映像中: ARG DEBIAN_FRONTEND=noninteractive
。
您应该将DEBIAN_FRONTEND = noninteractive设置为envvar。 在大多数情况下,这至less会使安装不会出错。
还有@Azdle提到的,使用debconf-set-selections可以让你设置特定的项目。
像往常一样,多一点searchfind答案。
答案是debconf-set-selections
。 Manpage: http : //manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html
要查找可以设置的选项,请在已安装软件包的系统上使用debconf-get-selections
。 你需要为第二个命令安装debconf-utils
。
这是工作解决scheme:
ARG DEBIAN_FRONTEND =非交互式