减少 Docker 构建警告
以下是一些消除 Dockerfile 构建过程中可能出现的警告的技巧。
debconf: delaying package configuration, since apt-utils is not installed (debconf: 正在延迟软件包配置,因为未安装 apt-utils)
此错误通常可以安全地忽略,且很难彻底根除。不过,您可以通过在 Dockerfile 中添加以下内容,将安装必要软件包时的输出减少至仅剩一条消息:
RUN apt-get update \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends apt-utils dialog 2>&1
Warning: apt-key output should not be parsed (stdout is not a terminal) (警告:不应解析 apt-key 的输出(标准输出并非终端))
此非关键警告提示您不要解析 apt-key 的输出;只要您的脚本没有这样做,就没有任何问题。您可以安全地忽略它。
之所以在 Dockerfile 中出现此警告,是因为 apt-key 命令并非在终端中运行。遗憾的是,此错误无法完全消除,但除非 apt-key 命令返回非零退出代码(表示失败),否则可以将其隐藏。
例如
# (OUT=$(apt-key add - 2>&1) || echo $OUT) will only print the output with non-zero exit code is hit
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | (OUT=$(apt-key add - 2>&1) || echo $OUT)
您也可以设置 APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE 环境变量来抑制该警告,但这样做看起来有点令人担忧,因此如果您使用它,请务必在 Dockerfile 中添加注释。
# Suppress an apt-key warning about standard out not being a terminal. Use in this script is safe.
ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=DontWarn
以红色显示的提示信息
某些命令行工具 (CLI) 会将特定信息(如调试详情)输出到标准错误流 (stderr) 而非标准输出流 (stdout)。这些信息会在 Visual Studio Code 的终端和输出日志中以红色显示。
如果这些消息无害,您可以通过在命令末尾附加 2>&1,将命令的标准错误输出重定向到标准输出。
例如
RUN apt-get -y install --no-install-recommends apt-utils dialog 2>&1
如果命令失败,您仍然能够看到错误信息,但它们将不再以红色显示。
避免使用 Docker 构建镜像时出现的问题
考虑到 Dockerfile 和 Docker Compose 文件可以在不使用 VS Code 或 devcontainer CLI 的情况下使用,您可能需要告知用户,如果镜像无法按预期工作,请勿直接尝试构建它。为了解决这个问题,您可以添加一个必须指定的构建参数来确保配置正确运行。
例如,您可以在 Dockerfile 中添加以下内容:
ARG vscode
RUN if [[ -z "$devcontainercli" ]] ; then printf "\nERROR: This Dockerfile needs to be built with VS Code !" && exit 1; else printf "VS Code is detected: $devcontainercli"; fi
并在您的 devcontainer.json 中添加以下内容:
"build": {
"dockerfile": "Dockerfile",
"args": {
// set devcontainer-cli arg for Dockerfile
"devcontainercli": "true"
},
}
对于 Docker Compose 的情况,您可以将此参数添加到扩展配置的单独覆盖文件 (override file) 中,该文件位于源代码树中与主 Docker Compose 文件不同的位置。