2017-10-27 25 views
1

2つ以上のコマンドを1行で実行できますが、最初のコマンドのステータスはbashで返しますか?私のドッキングウィンドウのビルドの内側にそのプロセスを実行することが不可欠である1行に2つ以上のコマンドを常に実行しますが、1つ目の終了ステータスを返す

RUN bin/myserver && cat tmp/log && rm -rf tmp 

を、そしてそれがドッキングウィンドウとして保存されるように、その後のクリーンアップをするために、不要なものを削除することは理にかなって:

私はドッカーにおける次のステップは、構築してきました層。

myserverはコンソール出力ではなくログ出力をログに記録するので、何が起きているかを知るために、特に失敗した場合には、ログを記録する必要があります。

どうすればいいですか?

+4

ここで '&&'演算子が何をしているのか分かりません。 '&& 'でコマンドを連鎖させると、右手のコマンドは' 0'を返した場合にのみ実行されます。したがって、 'bin/myserver'が失敗し、' 0'以外のものを返した場合、 'cat'は実行されず、なぜログに記録されません。 –

+0

デバッグするときに 'tmp/log'をボリュームとしてマウントしないのはなぜですか? –

+0

@TomFenechドッカービルドはgitlabビルドで実行されますが、失敗したコマンドの1つがビルド全体を停止するので、後でそれを使う必要はありません。私はそれを単一のライナーとして行う必要があります... –

答えて

1

方法について:

RUN sh -c 'bin/myserver; status=$?; cat tmp/log; rm -rf tmp; exit $status' 
+0

チャームはここに「sh -c」です。私は自分自身で 'exit $ status'を試してきました。シェルから投げ捨てられました;) –

0

あなたは2>

はエラーを無視するために使用するコマンドの標準エラー出力をリダイレクトすることができ、あなたはを/ dev/nullにリダイレクトすることができます:だからあなたの2>を/ dev/null

コマンドラインは次のようになります。

RUN bin/myserver && cat tmp/log 2> /dev/null && rm -rf tmp 2> /dev/null 
+0

私はあなたが私を誤解したと思います。私のmyserverはstderr/stdinではなく、ファイルにログを記録します。そして、それはエラー状態で失敗するので、失敗の場合に2番目のコマンドは決して呼び出されません。 –

関連する問題