Docker命令需要键盘交互

时间:2017-10-29 12:45:16

标签: docker interactive apt

我试图创建一个用于翻录CD的Docker镜像(使用abcde)。 这是Dockerfile的相关部分:

End_Of_Line

不幸的是,包裹" abcde"拉入邮件客户端(不确定是哪个),并试图通过询问要配置的邮件连接类型(smarthost / relay等)来配置它。

当docker运行时,它似乎没有从stdin读取,所以我无法重定向到docker进程。

我尝试过使用FROM ubuntu:17.10 MAINTAINER Graham Nicholls <graham@rockcons.co.uk> RUN apt update && apt -y install eject vim ruby abcde ... 和apt(用apt-get替换apt);遗憾的是--nodeps似乎不再是受支持的选项并返回:

  

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

有人建议使用expect来回答类似的问题,我宁愿避免。这似乎是一个难以谷歌&#34;问题 - 我找不到任何东西。

那么,有没有办法在apt中传递配置的答案,或者防止apt拉入邮件客户端,这会更好 - 我没有计划向cddb发送更新。< / p>

1 个答案:

答案 0 :(得分:3)

在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/*

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

您还希望在完成后清理包数据库以减小图层大小,并避免在以后的步骤中重用过时的缓存包数据库。

no-install-recommended选项将通过仅安装所需的依赖项而不是其他推荐的软件包来减少安装的软件包数量。这样我就可以将根文件系统的大小减少一半。

如果需要将非默认配置传递给包,请使用debconf。首先,您以交互方式安装,然后输入要保存的选项。安装debconf-utils。然后运行:

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

查看为该程序包配置的所有选项。然后,您可以在运行安装之前将这些选项传递到容器中的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 \
 ....

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

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