是否可以以某种方式回答在使用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非交互式,因为它仍然存在于最终映像中,即使运行类似docker run -i -t … bash的东西。因此,建议或者省略DEBIAN_FRONTEND,并用警告生效,或者为每个命令明确指定它。 RUN DEBIAN_FRONTEND =非交互apt-get install -y -q软件包。
幸运的是,新的ARG指令设置只在构建过程中生存的变量,因此现在可以在DockerFile中指定一个更优雅的解决方案,但不会保留在最终映像中:ARG DEBIAN_FRONTEND = noninteractive。