Dockerfileビルド-エラーを無視することは可能ですか?


111

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に指示する方法はありますか?

回答:


220

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

RUN make

あなたはそれを次のように置き換えることができます:

RUN make; exit 0

これは常に0(成功)終了コードを返します。ここでの欠点は、あなたのイメージがあった場合でも正常にビルドするために表示されるということですされ、ビルドプロセスの実際のエラーが。


2
走ろうとしたときここに来ましたservice php7-fpm start。これは1を返し、RUNは失敗します。使用service php7-fpm start; service php7-fpm statusするとうまくいきます-別々に実行する両方のコマンドが問題を引き起こすので、ビルド中の問題も解決するようです。
igorsantos07 2015

ソースからQt5をビルドしようとしたときにここに来ました。それはうまくビルドしますが、Qtビルドプロセスでビルドから実行時のテストが実行される(意図的に失敗する)事実と組み合わせて同時ビルドを使用すると、エラー(2)でRUNコマンドが終了しました。これでうまくいけば問題は解決します!
Lennart Rolland

32

これは、画像の潜在的なエラーが気付かれない/ログに記録されるほど無害でない人にとって興味深いかもしれません。(また、コメントするのに十分な担当者ではないので、ここで答えとしてください。)

指摘したように、の欠点はRUN make; exit 0、ビルドが失敗した場合に知ることができないことです。したがって、次のようなものを使用します。

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

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


これはちょっとおかしい答えです。私のユースケースは、到達apt-get update -yできないパッケージリストがあり、失敗していたことです。
Silviu Burcea

14

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

RUN <first stage> && <job that might fail> || true && <next stage>

ちょうど私が必要とするもの:)ジョブが失敗した場合に失敗するのがさらに良いでしょうが、次の段階(クリーンアップ)の後
csomakk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.