docker容器中的java进程在docker停止后总是以状态137结束

sz81bmfz  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(305)

我有一个以脚本开始的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) ,但这并没有改变什么。
我做错什么了?

uqdfh47h

uqdfh47h1#

docker不提供任何关闭钩子来正常关闭应用程序。如果您想在应用程序进程结束后停止容器,那么可以在sigkill信号触发docker stop之前提供睡眠持续时间--time=30。也可以从docker入口点触发应用程序关闭触发器

fykwrbwg

fykwrbwg2#

我想这是因为记忆不足。在正式文件中,有决议。https://success.docker.com/article/what-causes-a-container-to-exit-with-code-137

相关问题