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

Ubuntu 在docker下安装时是否可以回答对话框问题?,ubuntu,installation,docker,apt-get,Ubuntu,Installation,Docker,Apt Get,在使用apt get安装某些软件包时,是否可能以某种方式回答以对话框形式显示的问题 例如,我正在尝试设置一个包含邮件堆栈传递包的容器,其中包含: FROM ubuntu RUN apt-get install -y mail-stack-delivery 但是,dockerfile在构建时会产生几十个错误,这些错误大致如下: debconf: unable to initialize frontend: Dialog debconf: (TERM is not set, so the dia

在使用apt get安装某些软件包时,是否可能以某种方式回答以对话框形式显示的问题

例如,我正在尝试设置一个包含
邮件堆栈传递
包的容器,其中包含:

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: 
debconf:无法初始化前端:对话框
debconf:(未设置术语,因此对话框前端不可用。)
debconf:返回前端:Readline
debconf:无法初始化前端:Readline
debconf:(在@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.)第7行,第11行找不到Term/ReadLine/ReadLine/ReadLine/ReadLine)中的Term/ReadLine/ReadLine/ReadLine
debconf:返回前端:电传打字
dpkg预配置:无法重新打开stdin:

据我所知,我只是无法响应对话框,但是否有某种方法可以传递参数以提前回答每个问题?我知道这只是改变了一些配置,所以我可以在事后再做,但我想最好让安装脚本来做,这样一切都可以正常设置。

像往常一样,再搜索一点就可以找到答案

答案是
debconf set selections
。主页:


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

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

正如@Azdle所提到的,使用debconf set selection可以设置特定的项。

请参阅此处的讨论:。简言之,不建议设置
ENV DEBIAN_fronternative
,因为它会一直存在于最终映像中,即使在运行类似
docker run-i-t。。。bash
。因此,建议省略
DEBIAN_FRONTEND
并使用警告,或者为每个命令明确指定它,例如
RUN DEBIAN_FRONTEND=noninteractive apt get install-y-q package


幸运的是,新的
ARG
指令设置了仅在构建期间存在的变量,因此现在可以使用在
DockerFile
中指定的更优雅的解决方案,但不会保留在最终图像中:
ARG DEBIAN\u FRONTEND=非交互式

这是有效的解决方案:


ARG DEBIAN_fronternate=非交互式

ENV DEBIAN_fronternate非交互式
对我不起作用

这两种方法都没有进行交互
ARG DEBIAN_FRONTEND=noninteractive

但是
运行echo'debconf debconf/frontend select Noninteractive'| debconf set selections
did

成功示例:

echo'debconf debconf/frontend select non interactive'| debconf set selection
sudo-apt-get-install-y-q

我运行了一个
运行apt get-y-qq install python-pip-php-mbstring-php-bcmath
程序,该程序在出现消息
时停止构建我的dockerfile,并显示配置文件/etc/php/7.0/cli/php.ini的新版本(/usr/lib/php/7.0/php.ini production.cli)可用,但当前安装的版本已在本地修改
<代码>您想对修改后的配置文件php.ini做什么<代码>1。安装新版本2。保留本地版本。。。。添加此环境变量将提示您可以解释您的答案吗?比如它为什么起作用,有什么问题等等。我也有同样的问题。我试图添加“RUN DEBIAN_FRONTEND=noninteractive apt get install”,但收到了相同的错误。如果我在所有apt get命令中添加“RUN DEBIAN_FRONTEND=noninteractive”,那么它就可以正常工作。在那之后,我添加了“ARG DEBIAN_FRONTEND=noninteractive”,它就像一个符咒!对不起我的回答,我是这里的新手。我可以删除它:)一个好的答案不仅能解决问题,还能解释其背后的原因。例如,请看公认的答案。因此,我建议您要么大量编辑您的答案,并包含一些关于这些命令工作原理的背景信息,要么将其删除。我知道你的意思是好的,但最终我们希望保持高标准。否决票。这一解决方案在一年前被接受的答案的最后一部分中已经提到。