2017-09-07 12 views
2

私はJenkinsインスタンスを実行し、もう1つはYouTrackを実行する2つのDockerコンテナを持っています。彼らのそれぞれの出発スクリプトは次のようになります。Dockerコンテナの1つがマシンの起動時に自動的に起動しないのはなぜですか?

  • ジェンキンス:docker run --name jenkins_master --restart on-failure -p 8080:8080 -p 50000:50000 -v /home/ci/jenkins_home/:/var/jenkins_home -d jenkins:latest

  • YouTrack:特別docker run --name youtrack --restart on-failure -p 8081:80 -v /home/ci/youtrack/data/:/opt/youtrack/data/ -v /home/ci/youtrack/backup/:/opt/youtrack/backup -d uniplug/youtrack

あなたが見ることができるように、何も、いくつかのポートマッピングおよびいくつかの-v

私はPCを起動するときに起動してほしいです。 The Docker documenation saysドッカーは、ときに出るとき、またはドッカーが再起動し、あなたのコンテナが自動的に起動するかどうかを制御するために再起動ポリシーを提供します。

をドッカー「再起動」として、私は私のマシンを起動したときに、私が原因ブート時に実行するように両方の容器を仮定しました〜--restart on-failure。しかし、のJenkinsだけがポート8080で動作し始めます。マシンを再起動すると手動でYouTrackを起動する必要があります。

手動でコンテナを始めるのを避けるにはどうすればよいですか?

答えて

4

PCを再起動するとき、ドッカーデーモンは実行中のコンテナを停止しようとします。これは、実行中のすべてのコンテナでdocker stopを実行しているようであり、これは(hereから取られた)何が起こるかである:それはdoesnの

あなたはドッカーが最初に停止する ためにうまく処理が要求されますドッカ停止コマンドを発行

とあれば10秒以内に守らなければ、 強制的にそれを殺すでしょう。あなたは今までにSIGTERMシグナルを送る することにより、第1あなたはこの動作を見てきました返すように実行されているコンテナを停止する

ドッカ停止指令試みをドッキングウィンドウの停止を発行し、コマンドの 10秒を待たなければならなかった場合コンテナ内のルートプロセス(PID 1)。 プロセスがタイムアウト時間内に終了しなかった場合は、SIGKILL シグナルが送信されます。

--restart on-failureを指定すると、終了時に終了ステータスが0より大きい場合にのみ、dockerデーモンがコンテナを再起動します。私の推測では、あなたのyoutrackコンテナがdockerデーモンによって与えられたSIGTERMシグナルに正しく反応し、きれいに終了します(終了ステータス0)。反対側では、ジェンキン容器はきれいに出ない。このため、再起動時にjenkinsコンテナのみが再起動されます。

この問題を解決するには、--restart alwaysフラグを付けてコンテナを実行し、いずれの場合でもコンテナを再起動します。

+0

私はすでに '--restart always'に設定することを考えていました。追加情報ありがとう! :) –

+0

これは '--restart = unless-stopped'でも使えますか? – Extrawurst

+0

@Extrawurst私はそう思っていますが、確信が持てません。しかし、それを確認することは簡単です – whites11

関連する問題