Jak wyłączyć zrzuty plików podstawowych w kontenerze dokera?

13

Mój kontener PHP uruchamia lalkarza do generowania plików PDF. Generując dokument PDF, tworzy również dwa pliki zrzutu pamięci w moim kontenerze. Nie jestem pewien, skąd one pochodzą.

Host / serwer to CentOS 7.

Sprawdziłem następujące:

  1. Brak dziennika błędów aplikacji, przeglądarka / lalkarz działa bez błędów.
  2. Nie znaleziono dziennika błędów (np. Segfault) w /var/log/messages

Próbowałem wyłączyć zrzuty pamięci

Wykonując sekcję Wyłączanie zrzutów podstawowych https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ , zrobiłem:

  1. Dodanie następującej treści do /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Utworzono disable-core-dumps.sh przez: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Dodano następującą treść do /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. I ponownie uruchomić serwer i pojemnik .

  2. Próbowałem również ustawić ulimit -c 0wewnątrz kontenera (alpejski)

Żadna z powyższych sztuczek nie działa dla mnie. Za każdym razem, gdy lalkarz generuje plik PDF, zawsze tworzy dwa podstawowe pliki zrzutu, takie jak poniżej:

core.131 core.52

Podstawowe pliki wyglądają następująco:

Podstawowa zawartość pliku zrzutu

Czy ktoś może mi pomóc wyłączyć zrzuty pamięci? Wielkie dzięki.

Jonathan
źródło
Myślę, że musisz wyłączyć zrzut pamięci głównej na swoim hoście, a nie kontenerze, lub uruchomić kontener jak wcześniej
LinPy
@LinPy Wyłączyłem zrzut pamięci głównej na hoście już na linux-audit.com/… . Próbowałem wyłączyć zrzuty pamięci na hoście i kontenerze. Żaden z nich nie działa.
Jonathan
Jeśli chcesz znaleźć podstawową przyczynę tych rdzeni, zamiast je wyłączyć, sugeruję, abyś bardziej przyjrzał się lalkarzowi. Ponieważ lalkarz używa nodejs, a coredump ma w sobie moduły / lib nodejs, wydaje się, że to jak proces nodejs, który miał błąd. Istnieje kilka opcji debugowania, których można użyć, takich jak wyłączenie trybu bezgłowego lalkarza, które umożliwiają pełne rejestrowanie. Oto link, aby uzyskać więcej informacji: github.com/puppeteer/puppeteer#debugging-tips .
ahasbini
spróbuj edytować /etc/security/limits.conf /etc/systemd/coredump.conf insitde kontener na przykład w pliku Docker, który opisuje, jak zbudować obraz
Ryabchenko Alexander
@ahasbini dziwne jest to, że pliki PDF są doskonale generowane. Włączyłem debugowanie, ale nie znalazłem nic przydatnego. Tylko zrzuty rdzenia.
Jonathan

Odpowiedzi:

3

Musisz uruchomić swój kontener z opcją --ulimit core=0wyłączenia rdzeni.

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

Przykład

Na hoście tymczasowo ustaw ścieżkę zrzutu rdzeni na wartość /tmpdo weryfikacji:

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

Uruchom kontener jak zwykle i wymuś zrzut pamięci:

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

Teraz z --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
źródło
Dziękuję za odpowiedź. Używam komponowania i wypróbowałem konfigurację ulimit, ustawiając miękki i twardy na 0. Ale wciąż nie działa. Czy okno dokowane jest uruchomione —ulimit core = 0 to samo co ustawienie ulimit komponowania na 0?
Jonathan
Uważam, że należy go dodać do tego entrypoint.shsamego polecenia, które uruchamia aplikację php
ahasbini
2

mam ten problem również w usłudze dokującej roju i --ulimit core = 0 nie działa w usłudze roju Użyłem poniżej polecenia i pracowałem dla mnie w usłudze dokującej roju!

sysctl -w jądro.core_pattern = / dev / null

iraj norouzi
źródło
Dzięki! To też załatwia sprawę.
Jonathan