Как отключить дампы основного файла в Docker-контейнере

13

Мой PHP-контейнер запускает кукловод для создания PDF. Создавая документ PDF, он также создает два файла дампа памяти внутри моего контейнера. Я не уверен, откуда они на самом деле.

Хост / сервер - CentOS 7.

Я проверил следующее:

  1. Нет журнала ошибок приложения, Browsershot / puppeteer работает без ошибок.
  2. Журнал ошибок (например, segfault) не найден в /var/log/messages

Я пытался отключить дампы ядра

Следуя разделу Отключение дампов ядра на https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ , я сделал:

  1. Добавление следующего контента в /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Создал disable-core-dumps.sh с помощью: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Добавлен следующий контент в /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. И перезагрузите сервер и контейнер .

  2. Я также пытался установить ulimit -c 0внутри контейнера (альпийский)

Ни одна из вышеперечисленных уловок не работает для меня. Каждый раз, когда кукловод генерирует PDF, он всегда создает два файла дампа ядра, как показано ниже:

core.131 core.52

Основные файлы выглядят так:

Содержимое файла основного дампа

Может кто-нибудь поможет мне отключить дампы ядра? Большое спасибо.

Джонатан
источник
Я думаю, что вам нужно отключить дамп ядра на вашем хосте, а не на контейнере, или запустить ваш контейнер как предварительно настроенный
LinPy
@LinPy Я уже отключил дамп ядра на хосте, следуя linux-audit.com/… . Пробовал отключать дампы ядра как на хосте, так и на контейнере. Никто из них не работает.
Джонатан
Если вы хотите найти основную причину этих coredumps, а не отключать их, я бы посоветовал вам больше взглянуть на кукловода. Поскольку кукловод использует nodejs, а в coredump есть модули / libs nodejs, похоже, что, как и процесс nodejs, произошел сбой. Есть несколько вариантов отладки, которые можно использовать, например, отключение безголового режима кукловода, включение подробного ведения журнала. Вот ссылка для получения дополнительной информации: github.com/puppeteer/puppeteer#debugging-tips .
ахасбини
попробуйте отредактировать /etc/security/limits.conf /etc/systemd/coredump.conf insitde контейнер, например, в файле Docker, который описывает, как создать образ
Рябченко Александр
@ahasbini - странная вещь, что PDF-файлы прекрасно генерируются. Я включил отладку, но не смог найти ничего полезного. Просто дампы ядра.
Джонатан

Ответы:

3

Вы должны запустить свой контейнер с возможностью --ulimit core=0отключить coredumps.

Ссылка: https://docs.docker.com/engine/reference/commandline/run/#set-ulimits-in-container---ulimit

пример

На хосте временно установите путь coredump /tmpдля проверки:

echo '/tmp/core.%e.%p' | sudo tee /proc/sys/kernel/core_pattern

Запустите контейнер как обычно и форсируйте дамп ядра:

docker run --rm -it bash
(inside the container)
# yes > /dev/null &
# kill -SIGABRT $(pidof yes)
# ls /tmp
(shows core.yes.<pid>)

Теперь с --ulimit core=0:

docker run --ulimit core=0 --rm -it bash
(inside the container)
# yes > /dev/null &
# kill -SIGABRT $(pidof yes)
# ls /tmp
(No entries)
Филипп Людвиг
источник
Спасибо за ответ. Я использую compose и попробовал конфигурацию ulimit, установив soft и hard на 0. Но все равно не работает. Работает ли docker - ulimit core = 0 так же, как установка ulimit для compose в 0?
Джонатан
Я считаю, что он должен быть добавлен entrypoint.shв ту же команду, которая запускает приложение php
ahasbini
2

у меня тоже есть эта проблема на сервисе docker swarm, и --ulimit core = 0 не работает в сервисе swarm. Я использовал команду ниже и работал для меня в сервисе docker swarm!

sysctl -w kernel.core_pattern = / dev / null

Ира Норузи
источник
Спасибо! Это тоже помогает.
Джонатан