代码之家  ›  专栏  ›  技术社区  ›  9ilsdx 9rvj 0lo

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

  •  2
  • 9ilsdx 9rvj 0lo  · 技术社区  · 6 年前

    我用脚本启动了一个java进程:

    #!/bin/sh
    exec java $JAVA_OPTS -cp "lib/*" com.example.Launcher
    

    为了断言clean jetty shutdown,我添加了以下shutdown hook:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Hiromu Sasaya    6 年前

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

        2
  •  0
  •   Sumit datta    6 年前

    Docker没有为应用程序的正常关闭提供任何关闭钩子。如果要在应用程序进程结束后停止容器,则可以在SIGKILL信号触发之前提供睡眠持续时间 docker stop——时间=30 . You can also trigger your application shutdown trigger from docker entrypoint

    推荐文章