docker 停止后,docker 容器中的 Java 进程始终以状态 137 结束

标签 java docker

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

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

为了断言 clean jetty 关闭,我添加了以下关闭钩子(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 receivedShutdown completed,尽管如此,docker inspect 始终显示状态 137。

我最近添加了 System.exit(0),但这并没有改变任何东西。

我做错了什么?

最佳答案

我认为这是因为内存不足。 在官方文档中,有决议。 https://success.docker.com/article/what-causes-a-container-to-exit-with-code-137

关于docker 停止后,docker 容器中的 Java 进程始终以状态 137 结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54512013/

相关文章:

docker - 启动 RabbitMQ Docker 容器时如何添加初始用户?

amazon-web-services - 运行 lambda 函数时无法加载共享库 'libgdiplus' 或其依赖项之一

java - 如何使用 jaxb 将 xml 字符串解码为 java 对象

java - 为什么 elastic-search 容器的内存使用量一直在增加而很少使用?

java - 用于工件分析的 Jenkins 插件

java - 单元测试: running programmatically a code that runs only at a real application instance

elasticsearch - 停止的 docker 容器中的磁盘管理(清理)

node.js - Docker 运行失败 "return process.dlopen(module, path.toNamespacedPath(filename));"

java - Spring-Data-Jpa 在持久化后清除链接实体的所有参数

java - 防止从Java类中调用私有(private)构造函数