วิธีปิดใช้งานการถ่ายโอนไฟล์หลักในคอนเทนเนอร์นักเทียบท่า


13

ที่เก็บ PHP ของฉันใช้ puppeteer เพื่อสร้าง PDF ด้วยการสร้างเอกสาร PDF มันยังสร้างไฟล์ดัมพ์หลักสองไฟล์ภายในคอนเทนเนอร์ของฉัน ฉันไม่แน่ใจว่าพวกเขามาจากไหน

โฮสต์ / เซิร์ฟเวอร์คือ CentOS 7

ฉันได้ตรวจสอบดังต่อไปนี้:

  1. ไม่มีบันทึกข้อผิดพลาดของแอปพลิเคชัน Browsershot / puppeteer ทำงานโดยไม่มีข้อผิดพลาด
  2. ไม่พบบันทึกข้อผิดพลาด (เช่น segfault) /var/log/messages

ฉันพยายามที่จะปิดการใช้งานหลักทิ้ง

โดยทำตามปิดส่วนหลักทิ้งของhttps://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ฉันได้ทำไปแล้ว:

  1. การเพิ่มเนื้อหาต่อไปนี้ลงใน /etc/security/limits.conf
* soft core 0
* hard core 0
  1. สร้าง disable-core-dumps.sh โดย: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. เพิ่มเนื้อหาดังต่อไปนี้ใน /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. และรีบูตเครื่องเซิร์ฟเวอร์และภาชนะ

  2. ฉันยังพยายามที่จะตั้งulimit -c 0อยู่ภายในภาชนะ (อัลไพน์)

เทคนิคข้างต้นไม่เหมาะกับฉัน ทุกครั้งที่ puppeteer สร้าง PDF มันจะสร้างไฟล์ดัมพ์หลักสองไฟล์ดังนี้:

core.131 core.52

ไฟล์แกนดูเหมือนว่า:

เนื้อหาไฟล์ดัมพ์หลัก

ใครช่วยฉันปิดการใช้งานหลักทิ้ง? ขอบคุณมาก.


ฉันคิดว่าคุณต้องปิดการใช้งานการถ่ายโอนข้อมูลหลักบนโฮสต์ของคุณไม่ใช่คอนเทนเนอร์หรือเรียกใช้คอนเทนเนอร์ของคุณตามที่ได้กล่าวไว้
LinPy

@LinPy ฉันได้ปิดการใช้งานถ่ายโอนข้อมูลหลักในพื้นที่ที่มีอยู่แล้วโดยทำตาม linux-audit.com/... พยายามปิดใช้งานการถ่ายโอนหลักบนทั้งโฮสต์และคอนเทนเนอร์ ไม่ทำงานเลย
Jonathan

หากคุณต้องการค้นหาสาเหตุที่แท้จริงของ coredumps เหล่านี้แทนที่จะปิดใช้งานพวกเขาฉันขอแนะนำให้คุณดูนักเชิดหุ่นมากขึ้น เนื่องจาก puppeteer ใช้ nodejs และ coredump มี nodejs modules / libs อยู่จึงดูเหมือนว่ากระบวนการ nodejs ที่มีข้อผิดพลาด มีตัวเลือกการแก้ไขข้อบกพร่องบางอย่างที่สามารถใช้งานได้เช่นการปิดใช้งานโหมด headless ของ puppeteer กำลังเปิดใช้งานการบันทึก verbose นี่คือการเชื่อมโยงสำหรับข้อมูลเพิ่มเติม: github.com/puppeteer/puppeteer#debugging-tips
ahasbini

ลองแก้ไข /etc/security/limits.conf /etc/systemd/coredump.conf insitde container ตัวอย่างเช่นในไฟล์ Docker ที่อธิบายวิธีสร้างภาพ
Ryabchenko Alexander

@ahasbini สิ่งที่แปลกคือไฟล์ PDF ถูกสร้างขึ้นอย่างสมบูรณ์แบบ ฉันเปิดใช้งานการดีบัก แต่ไม่พบสิ่งที่มีประโยชน์ เพียงแกนทิ้ง
Jonathan

คำตอบ:


3

คุณต้องเริ่มต้นคอนเทนเนอร์ด้วยตัวเลือก--ulimit core=0เพื่อปิดใช้งาน coredumps

การอ้างอิง: https://docs.docker.com/engine/reference/commandline/run/#set-ulimits-in-container---ulimit

ตัวอย่าง

บนโฮสต์ให้ตั้งค่าพา ธ coredump ชั่วคราวเพื่อ/tmpตรวจสอบ:

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

สตาร์ทคอนเทนเนอร์ตามปกติและบังคับให้ดัมพ์หลัก:

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

ตอนนี้ด้วย--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)

ขอบคุณสำหรับคำตอบ. ฉันกำลังใช้เขียนและลอง ulimit config โดยการตั้งค่าอ่อนและแข็งถึง 0 แต่ก็ยังไม่ทำงาน นักเทียบท่าวิ่ง - จุดจบหลัก = 0 เหมือนกับการตั้งค่า ulimit ของการเขียนเป็น 0 หรือไม่?
Jonathan

ฉันเชื่อว่ามันควรจะเพิ่มentrypoint.shในในคำสั่งเดียวกันที่เริ่มต้นโปรแกรม PHP
ahasbini

2

ฉันมีปัญหานี้เช่นกันในบริการ swarm docker และ --ulimit core = 0 ไม่ทำงานในบริการ swarm ฉันใช้คำสั่งด้านล่างและทำงานให้ฉันในบริการ swarm docker!

sysctl -w kernel.core_pattern = / dev / null


ขอบคุณ! นี่ก็เป็นกลอุบายด้วยเช่นกัน
โจนาธา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.