【问题标题】:How to accept license agreement during docker build?如何在 docker build 期间接受许可协议?
【发布时间】:2022-02-15 20:49:07
【问题描述】:

如何编写可以通过yes来提示许可协议的Dockerfile?

  1. 在 Dockerfile 目录下,docker build -t "{user}/{tags}" . 然后构建失败。
  2. docker logs {container id},显示信息如下:

    Preparing to unpack .../ttf-mscorefonts-installer_3.4+nmu1ubuntu2_all.deb ...
    debconf: unable to initialize frontend: Dialog
    debconf: (TERM is not set, so the dialog frontend is not usable.)
    debconf: falling back to frontend: Readline
    Configuring ttf-mscorefonts-installer
    
    TrueType core fonts for the Web EULA END-USER LICENSE AGREEMENT FOR 
    MICROSOFT SOFTWARE
    ...
    Do you accept the EULA license terms? [yes/no]
    

【问题讨论】:

标签: docker ubuntu-16.04


【解决方案1】:

对我来说,安装前的 ACCEPT_EULA=y 完成了这项工作,就像

RUN apt-get update && ACCEPT_EULA=Y apt-get install PACKAGE -y

【讨论】:

    【解决方案2】:

    在此处关注issue: [16.04] debconf: delaying package configuration, since apt-utils is not installed的讨论。

    我在 Dockerfile 中添加了这三行代码:

    ENV DEBIAN_FRONTEND noninteractive
    ENV DEBIAN_FRONTEND teletype
    
    RUN apt-get update -y && apt-get install -y --no-install-recommends apt-utils \
    

    我终于可以构建 docker 镜像了!

    【讨论】:

    • 第二行使第一行变得无关紧要。
    【解决方案3】:

    您可以基于此尝试此解决方案:https://unix.stackexchange.com/a/106553

    1. 首先手动安装包(即在现有容器上,在本地机器上)
      $ apt-get install -y PACKAGE
      
    2. 安装后,获取许可证的debconf 设置
      $ debconf-get-selections | grep PACKAGE
      PACKAGE    PACKAGE/license    string    y
      
    3. 现在使用 Dockerfile 构建 Docker 映像:
      ARG DEBIAN_FRONTEND=noninteractive
      RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections && \
          echo PACKAGE PACKAGE/license string y | debconf-set-selections && \
          apt-get install -y PACKAGE
      

    您可能需要为debconf-set|get-selections 安装debconf-utils。

    【讨论】:

      【解决方案4】:

      我能够在 Dockerfile 的构建过程中同意许可,方法是通过管道安装需要使用 yes 命令确认的安装,该命令向任何确认提示发送垃圾邮件 y 或 yes(请参阅 @987654321 @)。之前,我的构建过程仍然卡在[yes/no] 提示符上,就像你描述的那样。请注意,this answer 中描述的步骤仍然是必需的。没有它们,yes 命令似乎还不够,因为构建过程仍然卡在[yes/no] 提示符上。

      这是我的 dockerfile 中的内容:

      ENV DEBIAN_FRONTEND noninteractive
      ENV DEBIAN_FRONTEND teletype
      RUN yes | apt-get install <package>
      

      这样,我可以自动接受终端中的提示:

      它实际上也适用于这些“debian 确认对话”(不知道正确的术语):

      也许有帮助:)

      【讨论】:

        【解决方案5】:

        您可以在 Dockerfile 的行尾写上-y。

        例子:

        RUN         apt-get update
        RUN         apt-get install netcat -y
        

        【讨论】:

        • 我已经将-y 添加到每个apt-get 命令中。 :( 这个issue也是同样的问题,还没成功。
        猜你喜欢
        • 2019-09-29
        • 1970-01-01
        • 2017-07-10
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多