2017-04-21 119 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