web-dev-qa-db-ja.com

Dockerfileビルド-エラーを無視できますか?

Dockerfileがあります。イメージをビルドするとき、ビルドはこのエラーで失敗します:

automake: error: no 'Makefile.am' found for any configure output
Error build: The command [/bin/sh -c aclocal && autoconf && automake -a] returned a non-zero code: 1

これは実際には無害です。ライブラリは正常にビルドされますが、Dockerはこのエラーを受け取るとビルドを停止します。これを無視するようにDockerに指示する方法はありますか?

81
Oskar

承知しました。 Dockerは、RUN内のDockerfileシェルスクリプトによって返されたエラーコードに応答しています。 Dockerfileに次のようなものがある場合:

RUN make

これを次のように置き換えることができます。

RUN make; exit 0

これは常に0(成功)終了コードを返します。ここでの欠点は、ビルドプロセスにareの実際のエラーがあっても、イメージが正常にビルドされるように見えることです。

176
larsks

これは、画像の潜在的なエラーが十分に無害ではないに気づかない/記録される (また、コメントするのに十分な担当者がいないので、ここに答えとして。)

指摘したように、RUN make; exit 0の短所は、ビルドが失敗した場合、あなたが知らないことです。したがって、次のようなものを使用してください。

make test 2>&1 > /where/ever/make.log || echo "There were failing tests!"

このように、Dockerイメージビルドプロセスのログを介して通知され、make(またはその他の実行、これはmakeに制限されません)の間に正確に何が悪くなったかを確認できます。

16
mths

また、標準のbash無視エラー|| trueを使用することもできます。これは、チェーンの途中にいる場合に便利です。

RUN <first stage> && <job that should not fail> || true && <next stage>
4
MortenB