У меня есть контейнер Docker, работающий на хосте с 1 ГБ оперативной памяти (на том же хосте работают и другие контейнеры). Приложение в этом контейнере Docker будет декодировать некоторые изображения, которые могут потреблять много памяти.
Время от времени этот контейнер будет выходить. Я сомневаюсь, что это связано с нехваткой памяти, но не очень уверен. Мне нужен способ найти первопричину. Итак, есть ли способ узнать, что произошло в связи со смертью этого контейнера?
docker
containers
exit
Ли Бин
источник
источник
docker logs <container-id>
.Ответы:
Другие упомянули
docker logs $container_id
о просмотре вывода приложения. Это всегда было моей первой проверкой.Затем вы можете запустить,
docker inspect $container_id
чтобы просмотреть подробную информацию о состоянии, например:Важная строка - «OOMKilled», которая будет истинной, если вы превысите ограничения памяти контейнера и Docker убьет ваше приложение. Вы также можете найти код выхода, чтобы узнать, определяет ли он причину выхода вашего приложения.
Обратите внимание, это только указывает, убивает ли сам докер ваш процесс, и требует, чтобы вы установили ограничение памяти для вашего контейнера. Вне докера ядро Linux может обмануть ваш процесс, если на самом хосте не хватает памяти. Linux часто записывает в журнал / var / log, когда это происходит. С помощью Docker Desktop в Windows и Mac вы можете настроить память, выделенную для встроенной виртуальной машины Linux, в настройках докера.
источник
Вы можете узнать, был ли процесс внутри контейнера OOMkilled, прочитав логи. OOMkills инициируются ядром, поэтому каждый раз, когда это происходит, есть несколько строк
/var/log/kern.log
, например:источник
Хотя принятый ответ - лучший вариант, иногда может быть полезно проверить с хоста и содержимое журнала (в Linux).
Вы можете сделать это, набрав:
или следить за ним
или уменьшите вывод, если он слишком длинный для вашего терминального буфера
источник