Процесс Java в контейнере Docker всегда заканчивается статусом 137 после остановки Docker - PullRequest
0 голосов
/ 04 февраля 2019

У меня запущен Java-процесс со сценарием:

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

Чтобы подтвердить отключение на чистой пристани, я добавил следующий хук отключения:

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 ]

0 голосов
/ 05 февраля 2019

Я думаю, это из-за нехватки памяти.В официальном документе есть разрешение.https://success.docker.com/article/what-causes-a-container-to-exit-with-code-137

0 голосов
/ 04 февраля 2019

Docker не предоставляет какого-либо хука отключения для корректного завершения работы приложения.Если вы хотите остановить контейнер после завершения процесса приложения, вы можете указать продолжительность ожидания до того, как сигнал SIGKILL сработает остановка докера - время = 30 . Вы также можете запустить триггер отключения приложения из точки входа в докер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...