在 VS Code 中尝试

减少 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 文件不同的位置。