Docker 컨테이너에서 코어 파일 덤프를 비활성화하는 방법


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컨테이너 (고산) 내부 에 설정하려고했습니다.

위의 트릭 중 어느 것도 나를 위해 작동하지 않습니다. 꼭두각시가 PDF를 생성 할 때마다 항상 아래와 같은 두 개의 코어 덤프 파일이 생성됩니다.

core.131 core.52

핵심 파일은 다음과 같습니다.

코어 덤프 파일 내용

누구든지 코어 덤프를 비활성화 할 수 있습니까? 고마워


컨테이너가 아닌 호스트에서 코어 덤프를 비활성화하거나 컨테이너를 미리 설정된대로 실행해야한다고 생각합니다
LinPy

@LinPy 이미 따라 호스트의 코어 덤프를 비활성화 한 linux-audit.com/...을 . 호스트와 컨테이너 모두에서 코어 덤프 비활성화를 시도했습니다. 그들 중 누구도 작동하지 않습니다.
조나단

이 코어 덤프를 비활성화하지 않고 근본 원인을 찾으려면 꼭두각시 인형에 대해 더 자세히 살펴보십시오. puppeteer는 nodejs를 사용하고 coredump에는 nodejs 모듈 / lib가 있으므로 결함이있는 nodejs 프로세스처럼 보입니다. 퍼펫 모드의 헤드리스 모드 비활성화와 같이 자세한 로깅 옵션을 활성화하는 것과 같이 사용할 수있는 디버깅 옵션이 있습니다. 자세한 내용은 github.com/puppeteer/puppeteer#debugging-tips 링크를 참조하십시오 .
ahasbini

이미지를 작성하는 방법을 설명하는 Docker 파일에서 /etc/security/limits.conf /etc/systemd/coredump.conf insitde 컨테이너를 편집하십시오.
Ryabchenko Alexander

@ahasbini 이상한 것은 PDF가 완벽하게 생성된다는 것입니다. 디버그를 활성화했지만 유용한 것을 찾을 수 없습니다. 핵심 덤프 만.
조나단

답변:


3

--ulimit core=0코어 덤프를 비활성화 하는 옵션 으로 컨테이너를 시작해야합니다 .

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

호스트에서 /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)

답변 해주셔서 감사합니다. compose를 사용하고 soft 및 hard를 0으로 설정하여 ulimit 구성을 시도했지만 여전히 작동하지 않습니다. docker run —ulimit core = 0이 compose의 ulimit를 0으로 설정하는 것과 동일합니까?
조나단

나는이 추가 될 전망이다 entrypoint.shPHP 애플리케이션 시작 동일한 명령에
ahasbini

2

도커 스웜 서비스 에서도이 문제가 있으며 --ulimit core = 0이 스웜 서비스에서 작동하지 않습니다. 아래 명령을 사용하여 도커 스웜 서비스에서 저를 위해 일했습니다!

sysctl -w kernel.core_pattern = / dev / null


감사! 이것은 트릭도 수행합니다.
조나단
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.