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

Phi*_* L. 48 docker

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

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"
Run Code Online (Sandbox Code Playgroud)

这相当于:

export DEBIAN_FRONTEND="noninteractive"
Run Code Online (Sandbox Code Playgroud)

然而,当从 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.
Run Code Online (Sandbox Code Playgroud)

哇...我发现我的错误。无法在 Dockerfile 的 ENV 行中添加注释。我要回答自己,因为我确定这会咬其他人......

k0p*_*kus 99

应该积极阻止将 设置DEBIAN_FRONTENDnoninteractivevia ENV。原因是环境变量在构建后仍然存在,例如当您运行docker exec -it ... bash. 这里的设置没有意义。

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

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

    ARG DEBIAN_FRONTEND=noninteractive
    RUN apt-get -qq install {your-package}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 需要时即时设置。

    RUN apt-get update && \
        DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
    
    Run Code Online (Sandbox Code Playgroud)

  • 注册只是为了投票 (9认同)

Phi*_* L. 28

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

即使用 Dockerfile 行:

ENV DEBIAN_FRONTEND noninteractive    # export DEBIAN_FRONTEND="noninteractive"
Run Code Online (Sandbox Code Playgroud)

变量:

DEBIAN_FRONTEND
Run Code Online (Sandbox Code Playgroud)

将完全包含这一行:

noninteractive    # export DEBIAN_FRONTEND="noninteractive"
Run Code Online (Sandbox Code Playgroud)

相当于做:

export DEBIAN_FRONTEND='noninteractive    # export DEBIAN_FRONTEND="noninteractive"'
Run Code Online (Sandbox Code Playgroud)

我几乎要取消我的问题,但是使用搜索引擎和 Stack Exchange,有些人可能有一天会在这里发现他们的错误;-)

  • 如果这是实际答案,您应该接受它,这样问题就不再列为未回答。 (6认同)
  • 不鼓励对 `DEBIAN_FRONTEND` 使用 `ENV`,请参阅:https://github.com/docker/docker/issues/4032 (5认同)