Docker命令需要键盘交互

我正在尝试创build一个用于翻录CD的Docker镜像(使用abcde)。 以下是Dockerfile的相关部分:

FROM ubuntu:17.10 MAINTAINER Graham Nicholls <graham@rockcons.co.uk> RUN apt update && apt -y install eject vim ruby abcde ... 

不幸的是,包“abcde”拉入邮件客户端(不知道哪个),并试图通过询问要configuration什么types的邮件连接(智能主机/中继等)来configuration。

当docker运行时,它不会从stdin读取,所以我不能redirect到docker进程。

我已经尝试使用--nodeps apt(并用apt-get代替apt); 不幸的是 – --nodeps似乎不再是一个支持的选项,并返回:

E:命令行选项–nodeps不能与其他选项结合使用

有人build议使用expect来回应类似的问题,我宁愿避免。 这似乎是一个“难以谷歌”的问题 – 我什么都找不到。

那么,有没有办法在apt中传递configuration的答案,或者阻止apt插入邮件客户端,这会更好 – 我不打算发送更新到cddb。

在Docker容器中安装apt包的典型模板如下所示:

 RUN apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ eject \ vim \ ruby \ abcde \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* 

使用“非交互”值运行它将删除任何提示。 您不希望将其设置为ENV因为这也会影响在容器中运行的任何交互式命令。

还需要在完成后清理包数据库,以减less图层大小,并避免在稍后的步骤中重新使用过时的caching包数据库。

no-install-recommends选项将通过仅安装所需的依赖关系来减less安装的软件包数量,而不是额外推荐的软件包。 这为我减less了一半的根文件系统的大小。


如果您需要将非默认configuration传递给包,请使用debconf。 首先运行你交互安装的地方,然后input你想保存的选项。 安装debconf-utils 。 然后运行:

 debconf-get-selections | grep "${package_name}" 

查看为该软件包configuration的所有选项。 然后,您可以在运行安装之前debconf-set-selections这些选项传递给容器中的debconf-set-selections ,例如:

 RUN echo "postfix postfix/main_mailer_type select No configuration" \ | debconf-set-selections \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ .... 

或将您的select保存到您复制的文件中:

 COPY debconf-selections / RUN debconf-set-selections </debconf-selections \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ .... 
Interesting Posts