dockerfile使用DEBIAN_FRONTEND

公西浩
2023-12-01

dockerfile中非交互模式

环境变量DEBIAN_FRONTEND,用以设置安装过程中的用户界面类型,告知操作系统应该从哪儿获得用户输入。如果设置为noninteractive,你就可以直接运行命令,而无需向用户请求输入(所有操作都是非交互式的)。

这在运行apt-get命令时格外有用,因为它会不停的提示用户进行到了哪步并且需要不断确认。尤其编写Dockerfile构建镜像时,有时候会遇到需要交互才能完成的命令,而build过程中又不支持交互,这时候就需要设置该变量来以非交互模式使用默认选项以最快速度完成构建。注意,请确保只在RUN命令中设置该选项,而不是使用ENV命令进行全局设置。因为ENV命令在整个容器运行过程中都会生效,所以当你通过BASH和容器进行交互时,如果进行了全局设置那就会出问题。

正确的做法:

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python3

错误的做法:

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get install -y python3

示例:

FROM ubuntu:trusty
MAINTAINER mryqu 
RUN \
 DEBIAN_FRONTEND=noninteractive apt-get update && \
 DEBIAN_FRONTEND=noninteractive apt-get -y install wget curl && \
 DEBIAN_FRONTEND=noninteractive apt-get -y autoremove && \
 DEBIAN_FRONTEND=noninteractive apt-get clean

DEBIAN_FRONTEND

Debian系列操作系统

DEBIAN_FRONTEND=noninteractive|text|newt|gtk|corba

默认值为 newt。对于串口安装,推荐值为text

而在自动化安装过程中,使用最频繁的还是noninteractive

Ubuntu操作系统

Ubuntu操作系统在Debian的基础上,还提供了如下支持:

DEBIAN_FRONTEND=dialog|readline|gnome|kde|editor|web

默认值为dialog。经典值为readline。如果安装过程中发现不支持dialog,则采用readline

查看操作系统可用的前端类型:

$ ll /usr/share/perl5/Debconf/FrontEnd/
total 68
drwxr-xr-x 3 root root 4096 Jun 19  2017 ./
drwxr-xr-x 8 root root 4096 Jun 19  2017 ../
-rw-r--r-- 1 root root 7389 Nov 10  2015 Dialog.pm
-rw-r--r-- 1 root root 2165 Nov 10  2015 Editor.pm
-rw-r--r-- 1 root root 5250 Nov 10  2015 Gnome.pm
drwxr-xr-x 2 root root   48 Jun 19  2017 Kde/
-rw-r--r-- 1 root root 4409 Nov 10  2015 Kde.pm
-rw-r--r-- 1 root root  734 Nov 10  2015 Noninteractive.pm
-rw-r--r-- 1 root root 6438 Nov 10  2015 Passthrough.pm
-rw-r--r-- 1 root root 3486 Nov 10  2015 Readline.pm
-rw-r--r-- 1 root root  881 Nov 10  2015 ScreenSize.pm
-rw-r--r-- 1 root root 1573 Nov 10  2015 Teletype.pm
-rw-r--r-- 1 root root  155 Nov 10  2015 Text.pm
-rw-r--r-- 1 root root 2665 Nov 10  2015 Web.pm

Dockerfile相关命令

  1. Dockerfile简单介绍及相关使用
  2. 如何用Dockerfile构建镜像
  3. Dockerfile命令详解
 类似资料: