Como desativar os despejos de arquivos principais no contêiner do docker

13

Meu contêiner PHP executa fantoches para gerar PDF. Ao gerar um documento PDF, ele também cria dois arquivos principais de despejo dentro do meu contêiner. Não sei de onde eles realmente vêm.

O host / servidor é o CentOS 7.

Eu verifiquei o seguinte:

  1. Nenhum log de erros do aplicativo, o Browsershot / puppeteer está sendo executado sem erros.
  2. Nenhum log de erro (por exemplo, segfault) foi encontrado em /var/log/messages

Eu tentei desativar os dumps principais

Seguindo a seção Desativar core dumps de https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ , eu fiz:

  1. Adicionando o seguinte conteúdo ao /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Criou um disable-core-dumps.sh ao: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Adicionado o seguinte conteúdo para /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. E reinicie o servidor e o contêiner .

  2. Eu também tentei colocar ulimit -c 0dentro do contêiner (alpino)

Nenhum dos truques acima funciona para mim. Sempre que o operador de marionetes gera um PDF, ele sempre cria dois arquivos principais de despejo, como abaixo:

core.131 core.52

Os arquivos principais são parecidos com:

Conteúdo principal do arquivo de despejo

Alguém pode me ajudar a desativar os core dumps? Muito obrigado.

Jonathan
fonte
Eu acho que você precisa desabilitar o dump principal no seu Host, não o contêiner, ou executá-lo como o anterior
LinPy
@LinPy Já desabilitei o dump principal no host, seguindo linux-audit.com/… . Tentei desativar os dumps principais no host e no contêiner. Nenhum deles funciona.
Jonathan
Se você gostaria de encontrar a causa raiz desses coredumps em vez de desabilitá-los, sugiro que você analise mais as marionetes. Como o puppeteer usa nodejs e o coredump possui nodejs modules / libs, parece que, como um processo nodejs que teve uma falha. Existem algumas opções de depuração que podem ser usadas, como desativar o modo sem cabeça do operador de marionetes está habilitando o log detalhado. Aqui está um link para mais informações: github.com/puppeteer/puppeteer#debugging-tips .
ahasbini 5/01
tente editar o contêiner insitde do /etc/security/limits.conf /etc/systemd/coredump.conf, por exemplo, no arquivo Docker que descreve como criar a imagem
Ryabchenko Alexander
@ahasbini o estranho é que os PDFs são perfeitamente gerados. Ativei a depuração, mas não encontrei nada útil. Apenas o núcleo despeja.
Jonathan

Respostas:

3

Você deve iniciar seu contêiner com a opção --ulimit core=0de desativar os coredumps.

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

Exemplo

No host, defina temporariamente o caminho do coredump /tmppara verificação:

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

Inicie um contêiner como de costume e force um dump principal:

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

Agora, com --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
fonte
Obrigado pela resposta. Estou usando o compose e tentei a configuração ulimit definindo soft e hard para 0. Mas ainda não está funcionando. A janela de encaixe é executada —ulimit core = 0 igual a definir o ulimit da composição como 0?
Jonathan
Eu acredito que deve ser adicionado ao entrypoint.sh, no mesmo comando que inicia o aplicativo php
ahasbini 7/01
2

Eu também tenho esse problema no serviço docker swarm e --ulimit core = 0 não funciona no serviço swarm, usei o comando abaixo e trabalhei para mim no serviço docker swarm!

sysctl -w kernel.core_pattern = / dev / null

iraj norouzi
fonte
Obrigado! Isso também funciona.
Jonathan