あなたの質問に答えられないので、死んだ容器を自動的に再起動することについては言及しません(状況によっては、この解決策があなたのニーズに合わない理由を尋ねるかもしれません)。
イメージに定義されているエントリポイントによって起動されたメインプロセスがコンテナ内で終了すると、コンテナが停止します。そのため、コンテナの停止を避けるために、いくつかの操作で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
いくつかの操作のためのあなたのコンテナ停止した場合、あなたが '' 'restart''' funcionality、' ''ドッカ実行を使用することができます... 。再起動時に失敗する '' ' –