2017-08-24 6 views
1

私は複数のポートで稼動しているサービスを持つドッカーコンテナを持っています。Dockerは終了しないプロセスを扱っていますか?

Dockerfileの途中でこれらのプロセスの1つを起動しようとすると、ビルドプロセスが無期限に停止します。

RUN /opt/webhook/webhook-linux-amd64/webhook -hooks /opt/webhook/hooks.json -verbose 

enter image description here

それはそれは上に移動することはありませんようにプログラムが実行されています。

私は、コマンドの最後に&を追加しようとしましたが、bashに次のステップを並行して実行させるように指示しましたが、これによりサービスが最終イメージで実行されません。私はまた、プログラムの出力を/dev/nullにリダイレクトしようとしました。

どうすればこの問題を回避できますか?

+0

[Dockerfile](https://docs.docker.com/engine/reference/builder/#cmd)の参考文献を参照する必要があります。 1つのCMDステートメントだけを持つことができます。 – gview

答えて

4

ここに誤解があります。 Dockerファイルのコマンドは、の実行前にドッカー画像を作成するために実行されます。 Dockerfileのコマンドの1つのタイプはRUNです。このコマンドを使用すると、作成中のイメージに影響を与える任意のシェルコマンドを実行できます。 したがって、ビルドプロセスはコマンドが終了するまで待機します。

画像の起動時にサービスを開始すると思われます。これを行うには、代わりにCMDコマンドを使用してください。画像が開始されたときに実行されるはずのものをDockerに伝えます。

+0

あなたは私のupvoteを持っていますが、 'CMD'への切り替えは私の問題を解決しなかったので、私は質問を開いたままにします。私は私の質問を更新しました。 –

+1

「CMD」の「スロット」は1つだけです。もしあなたがそれを複数回(私は推測すると)最後のものが勝ちます。両方のサービスを開始するスクリプトを作成して(&をバックグラウンドで最初に実行する)、スクリプトをイメージの「CMD」として置くことができます。 – fzgregor

+0

これはさらに役立つかもしれません:https://docs.docker.com/engine/admin/multi-service_container/ – fzgregor

関連する問題