gpt4 book ai didi

Docker 命令需要键盘交互

转载 作者:行者123 更新时间:2023-12-02 09:54:33 28 4
gpt4 key购买 nike

我正在尝试创建一个用于翻录 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”引入了一个邮件客户端(不确定是哪个),并且 apt 尝试通过询问要配置什么类型的邮件连接(智能主机/中继等)来配置它。

当 docker 运行时,它似乎没有从标准输入读取,因此我无法重定向到 docker 进程。

我尝试将 --nodeps 与 apt 一起使用(并用 apt-get 替换 apt);不幸的是 --nodeps 似乎不再是受支持的选项并返回:

E: Command line option --nodeps is not understood in combination with the other options

有人建议使用 Expect 来回答类似的问题,我宁愿避免这样做。这似乎是一个“难以谷歌”的问题 - 我找不到任何东西。

那么,有没有一种方法可以将答案传递给 apt 中的配置,或者阻止 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,因为这也会影响您在容器内运行的任何交互式命令。

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

no-install-recommends 选项将通过仅安装所需的依赖项(而不是其他推荐的软件包)来减少安装的软件包数量。这对我来说根文件系统的大小减少了一半。

<小时/>

如果您需要将非默认配置传递给包,请使用 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 \
....

关于Docker 命令需要键盘交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47000319/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com