我已经设置了以下环境,以便在apt-get install期间不会询问问题/对话框:
ENV DEBIAN_FRONTEND noninteractive # export DEBIAN_FRONTEND="noninteractive"
这相当于:
export DEBIAN_FRONTEND="noninteractive"
然而,当从一个Dockerfile构build一个镜像时,在一个特定的Debian / Ubuntu软件包安装(使用apt-get install)结束时,软件包configurationdebconf说:
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.
哇…我发现我的错误。 Dockerfile中的ENV行没有注释。 我会回答自己,因为我确信这会咬一些其他人。
好的,问题的根源在于:你不能用#在Dockerfiles的ENV行上放置注释,因为没有分隔符来表示“envvariables结束”,紧跟在variables名后面的所有内容都将在variables。
即与Dockerfile行:
ENV DEBIAN_FRONTEND noninteractive # export DEBIAN_FRONTEND="noninteractive"
variables:
DEBIAN_FRONTEND
将包含这整个行:
noninteractive # export DEBIAN_FRONTEND="noninteractive"
相当于做:
export DEBIAN_FRONTEND='noninteractive # export DEBIAN_FRONTEND="noninteractive"'
我几乎取消了我的问题,但与search引擎和堆栈交换,有些人可能会在这里发现他们的错误有一天;-)
积极劝阻通过ENV
将DEBIAN_FRONTEND
设置DEBIAN_FRONTEND
noninteractive
。 原因是环境variables在构build之后仍然存在,例如,当您运行docker exec -it ... bash
。 这里的设置没有意义。
还有两种可能的方法:
通过ARG
设置它,因为这只在构build过程中可用:
ARG DEBIAN_FRONTEND=noninteractive RUN apt-get -qq install {your-package}
必要时在飞行中进行设置。
RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get -qq install {your-package}