2017-04-21 128 views
2

我有GlassFish的容器。 命令來啓動我的容器是碼頭停止命令GlassFish

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

當我停止與停止命令的容器,它有一個錯誤停止。它以代碼137停止(它被OOMKiller破壞)。

Exited (137) 3 seconds ago

我改變了停止命令的-t參數1000,但結果卻是相同的 - 錯誤代碼137

當運行命令

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

容器在2秒內停止,代碼爲0。

如何設置標準停止命令,以便容器以代碼0停止?

回答

0

docker stop向主進程發送SIGTERM,等待進程停止的寬限期(默認爲10秒),如果進程沒有自行關閉,則發送SIGKILL。

問題在於Glassfish在收到SIGTERM時突然終止。

解決此問題的方法是創建一個shell腳本作爲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信號。

所以你需要哪些陷阱SIGTERM描述here的入口點腳本:

#!/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