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.


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)

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


Vielen Dank! Das macht auch den Trick.
— Jonathan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.