我有一个以脚本开始的java进程:
# !/bin/sh
exec java $JAVA_OPTS -cp "lib/*" com.example.Launcher
为了Assert干净的jetty关闭,我添加了以下关闭挂钩:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable()
{
@Override
public void run()
{
LOGGER.info("SIGTERM received");
try
{
jettyServer.stop();
LOGGER.info("Shutdown completed");
System.exit(0);
}
catch(Exception e)
{
LOGGER.error(e.getMessage(), e);
}
}
}));
我在日志里看到, SIGTERM received
以及 Shutdown completed
尽管如此, docker inspect
始终显示状态137。
我最近补充说 System.exit(0)
,但这并没有改变什么。
我做错什么了?
2条答案
按热度按时间uqdfh47h1#
docker不提供任何关闭钩子来正常关闭应用程序。如果您想在应用程序进程结束后停止容器,那么可以在sigkill信号触发docker stop之前提供睡眠持续时间--time=30。也可以从docker入口点触发应用程序关闭触发器
fykwrbwg2#
我想这是因为记忆不足。在正式文件中,有决议。https://success.docker.com/article/what-causes-a-container-to-exit-with-code-137