hadolint DL4006について
Set the SHELL option -o pipefail before RUN with a pipe in
DockerfileのRUN
命令の前に、SHELL
命令で、-o pipefail
を指定しておくべしというもの
なぜつけた方がいいのか?
example(ダメな例)
RUN wget -O - https://some.site | wc -l > /number
上の例では、wc -lコマンドが成功している限り、wgetコマンドが失敗しても、このビルドステップは成功して新しいイメージを生成
します。
そこでSHELL命令
の出番
example(良い例)
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN wget -O - https://some.site | wc -l > /number
bash -o pipefail / set -o pipefail
パイプでつないだ各コマンドの中で終了ステータスが0以外(正常終了以外)だった場合に、最後に0以外だったコマンドの終了ステータスが返されます。
すなわちwgetコマンドが失敗した場合に、ビルドが成功しないようになるということです