从 Dockerfile 构建时,Debian/Ubuntu 软件包安装 debconf 不允许非交互式安装

从 Dockerfile 构建时,Debian/Ubuntu 软件包安装 debconf 不允许非交互式安装

我已经设置了以下环境,以便在 apt-get install 期间不会询问任何问题/对话框:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

这相当于:

export DEBIAN_FRONTEND="noninteractive"

然而,当从 Dockerfile 构建映像时,在一个特定的 Debian/Ubuntu 包安装(使用 apt-get install)结束时,包配置 debconf 显示:

debconf: unable to initialize frontend: Noninteractive    # export DEBIAN_FRONTEND="noninteractive"
debconf: (Bareword "Debconf::FrontEnd::Noninteractive" not allowed while "strict subs" in use at (eval 35) line 3, <> line 1.)
debconf: falling back to frontend: Noninteractive
Subroutine BEGIN redefined at (eval 36) line 2, <> line 1.

答案1

它应该是积极劝阻通过 来DEBIAN_FRONTEND设置。原因是环境变量在构建后仍然存在,例如当您运行 时。这里的设置没有意义。noninteractiveENVdocker exec -it ... bash

还有另外两种可能的方法:

  1. 通过以下方式设置它,ARG因为这仅在构建期间可用:

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
  2. 需要时可即时设置。

    RUN apt-get update && \
        DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
    

答案2

好的,问题的根源是:您不能使用 # 在 Dockerfile 中的 ENV 行上添加注释,因为没有定界符来表示“环境变量的结束”,变量名之后的所有内容以及紧随其后的空格都将在变量中。

即使用 Dockerfile 行:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"

变量:

DEBIAN_FRONTEND

将包含以下整行:

noninteractive    # export DEBIAN_FRONTEND="noninteractive"

相当于:

export DEBIAN_FRONTEND='noninteractive    # export DEBIAN_FRONTEND="noninteractive"'

相关内容