Cómo deshabilitar los volcados de archivos principales en el contenedor docker

13

Mi contenedor PHP ejecuta titiritero para generar PDF. Al generar un documento PDF, también crea dos archivos de volcado de núcleo dentro de mi contenedor. No estoy seguro de dónde vienen realmente.

El host / servidor es CentOS 7.

He comprobado lo siguiente:

  1. No hay registro de errores de la aplicación, Browsershot / puppeteer se está ejecutando sin errores.
  2. No se encontró registro de errores (por ejemplo, segfault) en /var/log/messages

He intentado deshabilitar los volcados de núcleo

Siguiendo la sección Deshabilitar los volcados de núcleo de https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ , he hecho:

  1. Agregar el siguiente contenido a /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Creado un disable-core-dumps.sh por: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Se agregó el siguiente contenido a /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. Y reinicie el servidor y el contenedor .

  2. También he tratado de configurar ulimit -c 0dentro del contenedor (alpino)

Ninguno de los trucos anteriores funciona para mí. Cada vez que el titiritero genera un PDF, siempre crea dos archivos de volcado de núcleo como a continuación:

core.131 core.52

Los archivos principales se ven así:

Contenido del archivo de volcado del núcleo

¿Alguien puede ayudarme a desactivar los volcados de núcleo? Muchas gracias.

Jonathan
fuente
Creo que debe deshabilitar el volcado del núcleo en su Host, no en el contenedor, o ejecutar su contenedor como uno anterior
LinPy
@LinPy Ya he deshabilitado el volcado del núcleo en el host siguiendo linux-audit.com/… . Intenté deshabilitar los volcados de núcleo tanto del host como del contenedor. Ninguno de ellos funciona.
Jonathan
Si desea encontrar la causa raíz de estos problemas centrales en lugar de deshabilitarlos, le sugiero que busque más en titiriteros. Como el titiritero usa nodejs y el coredump tiene módulos / libs de nodejs, parece que es un proceso de nodejs que tuvo una falla. Hay algunas opciones de depuración que se pueden usar, como deshabilitar el modo sin cabeza de titiritero que permiten el registro detallado. Aquí hay un enlace para obtener más información: github.com/puppeteer/puppeteer#debugging-tips .
ahasbini
intente editar /etc/security/limits.conf /etc/systemd/coredump.conf insitde container, por ejemplo en el archivo Docker que describe cómo construir la imagen
Ryabchenko Alexander
@ahasbini lo extraño es que los PDF se generan perfectamente. Habilité la depuración pero no pude encontrar nada útil. Solo los basureros.
Jonathan

Respuestas:

3

Debe iniciar su contenedor con la opción --ulimit core=0de deshabilitar coredumps.

Referencia: https://docs.docker.com/engine/reference/commandline/run/#set-ulimits-in-container---ulimit

Ejemplo

En el host, configure temporalmente la ruta del coredump /tmppara verificación:

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

Inicie un contenedor como de costumbre y fuerce un volcado de núcleo:

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

Ahora con --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)
Philipp Ludwig
fuente
Gracias por la respuesta. Estoy usando compose y probé la configuración ulimit estableciendo soft y hard en 0. Pero aún no funciona. ¿Se ejecuta la ventana acoplable —ulimit core = 0 igual que establecer ulimit de compose en 0?
Jonathan
Creo que debería agregarse al entrypoint.sh, en el mismo comando que inicia la aplicación php
ahasbini
2

¡También tengo este problema en el servicio de enjambre de Docker y --ulimit core = 0 no funciona en el servicio de enjambre que utilicé debajo del comando y trabajé para mí en el servicio de enjambre de Docker!

sysctl -w kernel.core_pattern = / dev / null

iraj norouzi
fuente
¡Gracias! Esto también hace el truco.
Jonathan