gpt4 book ai didi

docker - 'DEBIAN_FRONTEND=noninteractive' 无法使用 apt-get 在 shell 脚本内工作

转载 作者:行者123 更新时间:2023-12-03 08:13:13 30 4
gpt4 key购买 nike

我正在使用 Dockerfile 来构建一个 docker 镜像。我已将 ARG DEBIAN_FRONTEND=noninteractive 放在 Dockerfile 的开头,以避免在构建时出现 debconf 警告。

在 Dockerfile 中使用 apt-get install 时不会显示警告。但是,当从包含 apt-get install 命令的 Dockerfile 执行 sh 脚本 (install_dependency.sh) 时,警告会再次出现。我还尝试在 sh 脚本本身内设置 DEBIAN_FRONTEND=noninteractive

我可以通过添加 echo 'debconf debconf/frontend select Noninteractive' | 来解决这个问题在 apt-get install 命令之前的 sh 脚本中 sudo debconf-set-selections 但我想避免这种情况,因为脚本中的任何失败都会使 debconf 选择为非交互式。

Dockerfile:

FROM ubuntu:18.04

# Avoid warnings by switching to noninteractive
ARG DEBIAN_FRONTEND=noninteractive

WORKDIR /tmp

# Configure APT --> HERE THE WARNINGS 'debconf: unable to initialize frontend: Dialog' ARE NOT DISPLAYED
RUN apt-get update \
&& apt-get -y upgrade \
&& apt-get install -y \
apt-utils \
dialog \
fakeroot \
software-properties-common \
2>&1

# Install APT packages --> HERE THE WARNINGS 'debconf: unable to initialize frontend: Dialog' ARE NOT DISPLAYED
RUN apt-get update && apt-get install -y \
#
# System packages
iproute2 \
procps \
lsb-release \
sudo \
unattended-upgrades \
dnsutils \
iputils-ping \
xauth \
openssl \
tar \
zip \
#
# Helpers
&& apt-get install -y \
ca-certificates \
curl \
wget \
lsof \
gconf2 \
gconf-service \
#
# Clean up
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

# Install LTE stack dependencies --> HERE THE WARNINGS 'debconf: unable to initialize frontend: Dialog' ARE DISPLAYED
RUN chmod +x install_dependencies.sh \
&& export DEBIAN_FRONTEND=noninteractive; ./install_dependencies.sh

install_dependency.sh:

#!/bin/sh

export DEBIAN_FRONTEND=noninteractive

APT_PACKAGES="lib32z1 \
python-setuptools \
libmysqlclient-dev \
ninja-build"

install_apt_packages() {
sudo apt-get install -y tzdata \
build-essential \
git

for package in $APT_PACKAGES;
do
sudo apt-get -y install "$package";
done
}

main() {
sudo apt-get update && sudo apt-get upgrade -y
install_apt_packages
}

main

编辑:感谢@arkadiusz-drabczyk告诉我从 apt-get 命令中删除 sudo,他所说的非常有道理,在执行命令之前环境变量会被删除。

最佳答案

在脚本中删除 sudo ,如果您以 root 身份运行,则有必要使用它。这也是 DEBIAN_FRONTEND 不起作用的原因 - 出于安全原因 sudo 会删除当前用户的环境,您必须与 -E 选项一起使用才能使其工作。

关于docker - 'DEBIAN_FRONTEND=noninteractive' 无法使用 apt-get 在 shell 脚本内工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70236670/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com