Dockerビルドの警告を減らす
以下は、Dockerfileのビルド時に表示される可能性のある警告を排除するためのヒントです。
debconf: apt-utilsがインストールされていないため、パッケージ構成を遅延しています
このエラーは通常、安全に無視でき、完全に排除するのは困難です。ただし、必要なパッケージをインストールする際に、Dockerfileに以下を追加することで、stdoutのメッセージを1つに減らすことができます。
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 の出力を解析しないようにというものであり、スクリプトが解析しない限り問題ありません。安全に無視できます。
これは、apt-key コマンドがターミナルから実行されていないため、Dockerfileで発生します。残念ながら、このエラーを完全に排除することはできませんが、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ファイルとはソースツリー内の別の場所に配置されます。