2017-04-21 18 views
2

私はGlassFishを持つコンテナを持っています。私は、停止コマンドを使用してコンテナを停止すると、私のコンテナを開始する コマンドは、それはエラーで停止し、ドッカー停止コマンドGlassFish

/opt/glassfish4/glassfish/bin/asadmin start-domain --verbose

です。コード137で停止します(OOMKillerによって破棄されます)。

Exited (137) 3 seconds ago

は、私が1000年に停止コマンドの-tパラメータを変更しましたが、結果は同じだった - 私は、コマンドを実行すると、エラーコード137

docker exec -it ecai /opt/glassfish4/glassfish/bin/asadmin stop-domain

コンテナは2秒でコード0で正常に停止します。

コンテナがコード0で停止するように標準停止コマンドを設定するにはどうすればよいですか?

答えて

0

docker stopは、メインプロセスにSIGTERMを送信し、プロセスが停止するための猶予期間(デフォルトでは10秒間)を待機し、プロセスがシャットダウンしない場合は、SIGKILLを送信します。

この問題は、SIGTERMを受信したときにGlassfishが突然終了するという問題があります。

これを解決するアプローチは、受信した信号を管理できるGlassfishイメージのエントリポイントとしてシェルスクリプトを作成することです。これを行うには、trapを使用して次のようなことを行うことができます。

#!/bin/bash 

_term() { 
    /opt/glassfish4/glassfish/bin/asadmin stop-domain 
} 

trap _term SIGTERM 

/opt/glassfish4/glassfish/bin/asadmin start-domain --verbose 

希望、これは幸運を助けます!

0

Glassfishは、docker stopコマンドによって送信されたSIGTERM信号をトラップしません。

ですから、hereを説明するように、トラップSIGTERMエントリポイントスクリプトが必要になります。

#!/bin/bash 

function gracefulShutdown { 
    echo "SIGTERM trapped : shutting down" 
    /opt/glassfish4/bin/asadmin stop-domain 
} 

trap gracefulShutdown SIGTERM 

/opt/glassfish4/bin/asadmin start-domain -v & 
wait 
関連する問題