减少 Docker 构建警告
以下是一些消除 Dockerfile 构建中可能出现的警告的技巧。
debconf: 延迟软件包配置,因为 apt-utils 未安装
通常可以安全地忽略此错误,并且很难完全消除。但是,通过将以下内容添加到 Dockerfile 中,可以在安装所需软件包时将其减少为 stdout 中的一条消息
RUN apt-get update \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends apt-utils dialog 2>&1
警告:不应解析 apt-key 的输出(stdout 不是终端)
这个非关键警告告诉你不要解析 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 会将某些信息(例如调试详情)输出到标准错误而不是标准输出。这些信息在 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,你可以将此参数添加到单独的覆盖文件以扩展配置中,该文件位于源代码树中与主 Docker Compose 文件不同的位置。