Làm thế nào để vô hiệu hóa các tập tin lõi trong container docker


13

Bộ chứa PHP của tôi chạy con rối để tạo PDF. Bằng cách tạo một tài liệu PDF, nó cũng tạo ra hai tệp kết xuất lõi bên trong thùng chứa của tôi. Tôi không chắc họ thực sự đến từ đâu.

Máy chủ / máy chủ là CentOS 7.

Tôi đã kiểm tra như sau:

  1. Không có nhật ký lỗi ứng dụng, Browseershot / Puppeteer đang chạy mà không có lỗi.
  2. Không tìm thấy nhật ký lỗi (ví dụ segfault) trong /var/log/messages

Tôi đã cố gắng vô hiệu hóa các bãi chứa lõi

Bằng cách theo dõi Vô hiệu hóa phần kết xuất cốt lõi của https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ , tôi đã hoàn thành:

  1. Thêm nội dung sau vào /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Đã tạo vô hiệu hóa-core-dumps.sh bằng cách: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Đã thêm nội dung sau vào /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. khởi động lại máy chủ và container .

  2. Tôi cũng đã cố gắng đặt ulimit -c 0bên trong container (alpine)

Không có thủ thuật nào ở trên làm việc cho tôi. Mỗi khi con rối tạo ra một tệp PDF, nó luôn tạo hai tệp kết xuất lõi như bên dưới:

core.131 core.52

Các tập tin cốt lõi trông như:

Nội dung tập tin kết xuất lõi

Bất cứ ai có thể giúp tôi để vô hiệu hóa các bãi lõi? Cảm ơn rất nhiều.


Tôi nghĩ rằng bạn cần phải vô hiệu hóa kết xuất lõi trên Máy chủ của mình chứ không phải container hoặc chạy container của bạn như đã được ưu tiên
LinPy

@LinPy Tôi đã vô hiệu hóa kết xuất lõi trên máy chủ bằng cách theo dõi linux-audit.com/ . Đã thử vô hiệu hóa các bãi chứa lõi trên cả máy chủ và container. Không ai trong số họ làm việc.
Jonathan

Nếu bạn muốn tìm ra nguyên nhân gốc rễ của những coredumps này hơn là vô hiệu hóa chúng, thì tôi khuyên bạn nên tìm hiểu thêm về con rối. Vì con rối sử dụng nodejs và coredump có các mô-đun / lib của nodejs, nên có vẻ như quá trình nodejs có lỗi. Có một số tùy chọn gỡ lỗi có thể được sử dụng như vô hiệu hóa chế độ không đầu của con rối đang cho phép ghi nhật ký chi tiết. Đây là một liên kết để biết thêm thông tin: github.com/puppeteer/puppeteer#debugging-tips .
ahasbini

cố gắng chỉnh sửa /etc/security/limits.conf /etc/systemd/coredump.conf ví dụ trong container Docker mô tả cách xây dựng hình ảnh
Ryabchenko Alexander

@ahasbini điều kỳ lạ là các tệp PDF được tạo hoàn hảo. Tôi đã bật gỡ lỗi nhưng không thể tìm thấy bất cứ điều gì hữu ích. Chỉ là bãi rác cốt lõi.
Jonathan

Câu trả lời:


3

Bạn phải bắt đầu container của bạn với tùy chọn --ulimit core=0để vô hiệu hóa coredumps.

Tham khảo: https://docs.docker.com/engine/reference/commandline/run/#set-ulimits-in-container---ulimit

Thí dụ

Trên máy chủ, tạm thời đặt đường dẫn coredump để /tmpxác minh:

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

Bắt đầu một container như bình thường và buộc một bãi chứa lõi:

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

Bây giờ, với --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)

Cảm ơn câu trả lời. Tôi đang sử dụng compose và đã thử cấu hình ulimit bằng cách đặt mềm và cứng thành 0. Nhưng vẫn không hoạt động. Có phải docker chạy Lõiulimit = 0 giống như cài đặt ulimit của compose thành 0?
Jonathan

Tôi tin rằng nó nên được thêm vào entrypoint.sh, trong cùng một lệnh khởi động ứng dụng php
ahasbini

2

Tôi cũng gặp vấn đề này với dịch vụ docker swarm và --ulimit core = 0 không hoạt động trong dịch vụ swarm tôi đã sử dụng lệnh dưới đây và làm việc cho tôi trong dịch vụ swer docker!

sysctl -w kernel.core_potype = / dev / null


Cảm ơn! Điều này cũng có mẹo.
Jonathan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.