Docker kapsayıcısında çekirdek dosya dökümlerini devre dışı bırakma


13

PHP konteynırım PDF oluşturmak için kuklacı çalıştırıyor. Bir PDF belgesi oluşturarak, kabımın içinde iki temel döküm dosyası oluşturur. Aslında nereden geldiklerinden emin değilim.

Ana bilgisayar / sunucu CentOS 7'dir.

Aşağıdakileri kontrol ettim:

  1. Uygulama hata günlüğü yok, Browsershot / puppeteer hatasız çalışıyor.
  2. İçinde hata günlüğü (ör. Segfault) bulunamadı /var/log/messages

Çekirdek dökümleri devre dışı bırakmaya çalıştım

Https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ adresinin çekirdek dökümlerini devre dışı bırak bölümünü izleyerek şunları yaptım:

  1. Adresine aşağıdaki içeriği ekleme /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Disable-core-dumps.sh tarafından oluşturuldu: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Adresine aşağıdaki içerik eklendi /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. Ve sunucuyu ve kapsayıcısını yeniden başlatın .

  2. Ayrıca ulimit -c 0kabın içine yerleştirmeye çalıştım (alpin)

Yukarıdaki numaralardan hiçbiri benim için çalışmıyor. Kuklacı bir PDF oluşturduğunda, her zaman aşağıdaki gibi iki temel döküm dosyası oluşturur:

core.131 core.52

Çekirdek dosyalar şöyle görünür:

Çekirdek döküm dosyası içeriği

Çekirdek dökümleri devre dışı bırakmama yardımcı olabilecek biri var mı? Çok teşekkürler.


Kapsayıcıda değil, Ana Bilgisayarınızdaki çekirdek dökümü devre dışı bırakmanız veya kapsayıcıyı önceden belirlenmiş bir şekilde çalıştırmanız gerektiğini düşünüyorum
LinPy

@LinPy linux-audit.com/… 'u izleyerek ana bilgisayardaki çekirdek dökümü zaten devre dışı bıraktım . Hem konak hem de kap üzerindeki devre dışı bırakılan çekirdek dökümü denendi. Hiçbiri çalışmıyor.
Jonathan

Eğer bu özürlülerin onları devre dışı bırakmak yerine ana nedenini bulmak istiyorsanız, o zaman kuklacıya daha fazla bakmanızı öneririm. Kuklacı nodejs kullandığı ve coredump'ın nodejs modülleri / libs içerdiği için, bir hataya sahip bir nodejs işlemi gibi görünüyor. Kuklacının başsız modunun devre dışı bırakılması gibi kullanılabilecek bazı hata ayıklama seçenekleri vardır. Daha fazla bilgi için bir link: github.com/puppeteer/puppeteer#debugging-tips .
ahasbini

/etc/security/limits.conf /etc/systemd/coredump.conf insitde kapsayıcısını, örneğin görüntünün nasıl oluşturulacağını anlatan Docker dosyasında düzenlemeye çalışın
Ryabchenko Alexander

@ahasbini, PDF'lerin mükemmel bir şekilde oluşturulduğu garip bir şey. Hata ayıklamayı etkinleştirdim ancak yararlı bir şey bulamadım. Sadece çekirdek dökülüyor.
Jonathan

Yanıtlar:


3

--ulimit core=0Kapsülleri coredumps'ı devre dışı bırakma seçeneğiyle başlatmanız gerekir .

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

Misal

Ana bilgisayarda, /tmpdoğrulama için coredump yolunu geçici olarak olarak ayarlayın :

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

Her zamanki gibi bir konteyner başlatın ve bir çekirdek dökümü zorlayın:

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

Şimdi --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)

Cevap için teşekkürler. Ben compose kullanarak ve yumuşak ve zor 0'a ayarlayarak ulimit yapılandırma denedim ama yine de çalışmıyor. Docker run —ulimit core = 0, compose'nin ulimit değerini 0 olarak ayarlamakla aynı mı?
Jonathan

Ben entrypoint.shphp uygulamasını başlatan aynı komutta eklenmelidir inanıyorum
ahasbini

2

i docker sürüsü hizmeti de bu sorunu var ve --ulimit core = 0 sürüsü hizmetinde çalışmıyor Ben komutun altında kullanılan ve benim için docker sürüsü hizmetinde çalıştı!

sysctl -w kernel.core_pattern = / dev / null


Teşekkürler! Bu da hile yapar.
Jonathan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.