減少 Docker 建置警告
以下是一些消除 Dockerfile 建置中可能出現的警告的訣竅。
debconf: delaying package configuration, since apt-utils is not installed
這個錯誤通常可以安全地忽略,而且很難完全消除。但是,您可以將其減少為在安裝所需套件時在 stdout 中的一則訊息,方法是在您的 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
的輸出,因此只要您的腳本沒有這樣做,就沒有問題。您可以安全地忽略它。
這會在 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 檔案不同的位置。