我有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停止?
答案 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