2017-08-21 12 views
2

ドッキング・コンテナの実行時に起動するスプリング・ブート・ジャーがあります。すべてが正常に動作しています。プロセスを停止して起動している間にドッキング・コンテナを稼働させたままにします

ここでは、このjarサポートにも他の操作があります。これらの操作を使用するには、必要なパラメータを渡して、再び(容器の中に)瓶を呼び出さなければなりません。問題は、いくつかの操作がすでに実行中のプロセスを強制終了し、必要な変更を加えてからアプリケーションを再起動することです。プロセスが終了すると、Dockerコンテナも停止します。

プロセス全体でコンテナを稼働させ続けるにはどうすればいいですか?

+0

いくつかの操作のためのあなたのコンテナ停止した場合、あなたが '' 'restart''' funcionality、' ''ドッカ実行を使用することができます... 。再起動時に失敗する '' ' –

答えて

2

あなたの質問に答えられないので、死んだ容器を自動的に再起動することについては言及しません(状況によっては、この解決策があなたのニーズに合わない理由を尋ねるかもしれません)。

イメージに定義されているエントリポイントによって起動されたメインプロセスがコンテナ内で終了すると、コンテナが停止します。そのため、コンテナの停止を避けるために、いくつかの操作でjavaアプリケーションを再起動する必要があるときに停止しないエントリポイントを使用します。さらに、このエントリーポイントはそれ自身が操作を開始することができ、それはあなたのjavaアプリケーションのプロセス制御者になります。

このような例のDockerfileは、entrypointがJavaのコンテナではなく特定のシェルであることがわかります。

From [...] 
EXPOSE 443 
[...] 
COPY entrypoint.sh /usr/local/bin 
CMD chmod 755 /usr/local/bin/entrypoint.sh 
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] 

、あなたのentrypoint.shこのように書く:

#!/bin/bash 
[...] 
# launch your spring boot jar in a subprocess 
java -jar target/myproject-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 & 
# or 
mvn spring-boot:run > /dev/null 2>&1 & 

# you may detach your java process from the shell job list, if needed 
disown %1 

# now wait infinitely for a "docker stop", that should be the only way to stop this container 
while sleep 1 
do 
    echo waiting for this container to be terminated 
    # if needed, launch your app again (in case it has been terminated and not relaunched automatically) 
    if ! ps auxgww | grep -v grep | grep java 
    then 
    java -jar target/myproject-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 & 
    # or 
    mvn spring-boot:run > /dev/null 2>&1 & 

    # you may detach your java process from the shell job list, if needed 
    disown %1 
    fi 
done 
+0

ありがとう、アレクサンドル。私はあなたの提案されたアプローチに従って、今はうまくいっています。 – lex

関連する問題