So deaktivieren Sie Core File Dumps im Docker-Container

13

In meinem PHP-Container wird Puppenspieler ausgeführt, um PDF zu generieren. Durch das Generieren eines PDF-Dokuments werden außerdem zwei Core-Dump-Dateien in meinem Container erstellt. Ich bin mir nicht sicher, woher sie tatsächlich kommen.

Der Host / Server ist CentOS 7.

Ich habe Folgendes überprüft:

  1. Kein Anwendungsfehlerprotokoll, Browsershot / Puppenspieler läuft ohne Fehler.
  2. Es wurde kein Fehlerprotokoll (z. B. Segfault) gefunden /var/log/messages

Ich habe versucht, Core Dumps zu deaktivieren

Durch Befolgen des Abschnitts "Kernspeicherauszüge deaktivieren" von https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ habe ich Folgendes getan:

  1. Hinzufügen von folgendem Inhalt zu /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Erstellt eine disable-core-dumps.sh von: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Folgende Inhalte wurden hinzugefügt /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. Und starten Sie den Server und den Behälter .

  2. Ich habe auch versucht, ulimit -c 0in den Container (alpine) zu setzen

Keiner der oben genannten Tricks funktioniert bei mir. Jedes Mal, wenn der Puppenspieler ein PDF generiert, werden zwei Core-Dump-Dateien wie folgt erstellt:

core.131 core.52

Die Kerndateien sehen wie folgt aus:

Inhalt der Core-Dump-Datei

Kann mir jemand helfen, die Core Dumps zu deaktivieren? Vielen Dank.

Jonathan
quelle
Ich denke, Sie müssen den Core-Dump auf Ihrem Host deaktivieren, nicht den Container, oder Ihren Container wie zuvor ausgeführt ausführen
LinPy
@LinPy Ich habe den Core - Dump auf dem Host bereits durch folgende deaktiviert linux-audit.com/... . Es wurde versucht, Core-Dumps sowohl auf dem Host als auch auf dem Container zu deaktivieren. Keiner von ihnen funktioniert.
Jonathan
Wenn Sie die Grundursache für diese Coredumps finden möchten, anstatt sie zu deaktivieren, sollten Sie sich mehr mit Puppenspielern befassen. Da Puppenspieler NodeJS verwendet und der Coredump NodeJS Module / Libs enthält, scheint dies wie ein NodeJS-Prozess, der einen Fehler hatte. Es gibt einige Debugging-Optionen, die verwendet werden können, z. B. das Deaktivieren des Headless-Modus des Puppenspielers, um die ausführliche Protokollierung zu aktivieren. Hier ist ein Link für weitere Informationen: github.com/puppeteer/puppeteer#debugging-tips .
Ahasbini
Versuchen Sie, /etc/security/limits.conf /etc/systemd/coredump.conf in den Container einzufügen, z. B. in der Docker-Datei, in der beschrieben wird, wie das Image erstellt wird
Ryabchenko Alexander
@ahasbini das Seltsame ist, dass PDFs perfekt generiert werden. Ich habe das Debuggen aktiviert, konnte aber nichts Nützliches finden. Nur die Core Dumps.
Jonathan

Antworten:

3

Sie müssen Ihren Container mit der Option starten --ulimit core=0, Coredumps zu deaktivieren.

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

Beispiel

Setzen Sie auf dem Host vorübergehend den Coredump-Pfad zur /tmpÜberprüfung auf:

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

Starten Sie einen Container wie gewohnt und erzwingen Sie einen Core Dump:

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

Nun mit --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
quelle
Danke für die Antwort. Ich benutze compose und habe die ulimit-Konfiguration ausprobiert, indem ich soft und hard auf 0 gesetzt habe. Aber es funktioniert immer noch nicht. Ist der Docker-Run - ulimit core = 0 gleichbedeutend mit dem Setzen von compim's ulimit auf 0?
Jonathan
Ich glaube, es sollte entrypoint.shim selben Befehl hinzugefügt werden, mit dem die PHP-Anwendung
gestartet wird
2

Ich habe dieses Problem auch auf dem Docker-Schwarmdienst und --ulimit core = 0 funktioniert nicht im Schwarmdienst. Ich habe den folgenden Befehl verwendet und für mich im Docker-Schwarmdienst gearbeitet!

sysctl -w kernel.core_pattern = / dev / null

iraj norouzi
quelle
Vielen Dank! Das macht auch den Trick.
Jonathan