我已经设置了以下环境,以便在 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_FRONTEND为noninteractivevia ENV。原因是环境变量在构建后仍然存在,例如当您运行docker exec -it ... bash. 这里的设置没有意义。
还有另外两种可能的方式:
通过设置它,ARG因为这仅在构建期间可用:
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get -qq install {your-package}
Run Code Online (Sandbox Code Playgroud)需要时即时设置。
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}
Run Code Online (Sandbox Code Playgroud)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,有些人可能有一天会在这里发现他们的错误;-)
| 归档时间: |
|
| 查看次数: |
40979 次 |
| 最近记录: |