docker stop命令GlassFish

时间:2017-04-21 10:13:28

标签: docker glassfish

我有GlassFish的容器。 启动我的容器的命令是

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

当我使用stop命令停止容器时,它会因错误而停止。它停止使用代码137(它被OOMKiller破坏)。

Exited (137) 3 seconds ago

我将stop命令的-t参数更改为1000,但结果相同 - 错误代码137

当我运行命令

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

容器在2秒内停止使用代码0。

如何设置标准停止命令,以便容器以代码0停止?

2 个答案:

答案 0 :(得分:0)

docker stop向主进程发送SIGTERM,等待一个宽限期(默认为10秒)以使进程停止,如果进程没有自行关闭,则发送SIGKILL。

问题在于,当收到SIGTERM时,Glassfish会突然终止。

解决此问题的方法是创建一个shell脚本作为Glassfish图像的入口点,您可以在其中管理收到的信号。为此,您可以使用trap执行以下操作。

#!/bin/bash

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

trap _term SIGTERM

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

希望这有帮助,祝你好运!

答案 1 :(得分: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