Comment désactiver les vidages de fichiers principaux dans le conteneur Docker

13

Mon conteneur PHP exécute marionnettiste pour générer des PDF. En générant un document PDF, il crée également deux fichiers de vidage principaux dans mon conteneur. Je ne sais pas d'où ils viennent.

L'hôte / serveur est CentOS 7.

J'ai vérifié ce qui suit:

  1. Aucun journal d'erreurs d'application, Browsershot / puppeteer s'exécute sans erreurs.
  2. Aucun journal d'erreurs (par exemple segfault) trouvé dans /var/log/messages

J'ai essayé de désactiver les vidages mémoire

En suivant la section Disable core dumps de https://linux-audit.com/understand-and-configure-core-dumps-work-on-linux/ , j'ai fait:

  1. Ajout du contenu suivant à /etc/security/limits.conf
* soft core 0
* hard core 0
  1. Créé un disable-core-dumps.sh par: echo “ulimit -c 0 > /dev/null 2>&1” > /etc/profile.d/disable-coredumps.sh

  2. Ajout du contenu suivant à /etc/systemd/coredump.conf

[Coredump]

Storage=none
ProcessSizeMax=0
  1. Et redémarrez le serveur et le conteneur .

  2. J'ai également essayé de mettre ulimit -c 0à l'intérieur du conteneur (alpin)

Aucun des trucs ci-dessus ne fonctionne pour moi. Chaque fois que le marionnettiste génère un PDF, il crée toujours deux fichiers de vidage principaux comme ci-dessous:

core.131 core.52

Les fichiers principaux ressemblent à:

Contenu du fichier de vidage principal

Quelqu'un peut-il m'aider à désactiver les vidages mémoire? Merci beaucoup.

Jonathan
la source
Je pense que vous devez désactiver le vidage de mémoire sur votre hôte et non le conteneur ou exécuter votre conteneur comme prévu
LinPy
@LinPy J'ai déjà désactivé le vidage de mémoire sur l'hôte en suivant linux-audit.com/… . J'ai essayé de désactiver les vidages de mémoire sur l'hôte et le conteneur. Aucun ne fonctionne.
Jonathan
Si vous souhaitez trouver la cause première de ces coredumps plutôt que de les désactiver, je vous suggère de regarder davantage dans le marionnettiste. Étant donné que le marionnettiste utilise nodejs et que le coredump contient des modules / libs nodejs, il semble que, comme un processus nodejs qui avait un défaut. Il existe certaines options de débogage qui peuvent être utilisées, comme la désactivation du mode sans tête du marionnettiste, l'activation de la journalisation détaillée. Voici un lien pour plus d'informations: github.com/puppeteer/puppeteer#debugging-tips .
ahasbini
essayez de modifier /etc/security/limits.conf /etc/systemd/coredump.conf le conteneur d'insitde par exemple dans le fichier Docker qui décrit comment construire l'image
Ryabchenko Alexander
@ahasbini ce qui est bizarre, c'est que les fichiers PDF sont parfaitement générés. J'ai activé le débogage mais je n'ai rien trouvé d'utile. Juste les décharges principales.
Jonathan

Réponses:

3

Vous devez démarrer votre conteneur avec l'option --ulimit core=0de désactiver les coredumps.

Référence: https://docs.docker.com/engine/reference/commandline/run/#set-ulimits-in-container---ulimit

Exemple

Sur l'hôte, définissez temporairement le chemin coredump sur /tmppour vérification:

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

Démarrez un conteneur comme d'habitude et forcez un vidage de mémoire:

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

Maintenant, avec --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
la source
Merci d'avoir répondu. J'utilise compose et a essayé la configuration ulimit en définissant soft et hard sur 0. Mais ne fonctionne toujours pas. Le docker run -ulimit core = 0 revient-il à définir ulimit de compose sur 0?
Jonathan
Je crois qu'il devrait être ajouté à la entrypoint.sh, dans la même commande qui démarre l'application php
ahasbini
2

J'ai aussi ce problème sur le service Docker Swarm et --ulimit core = 0 ne fonctionne pas dans le service Swarm J'ai utilisé la commande ci-dessous et j'ai travaillé pour moi dans le service Docker Swarm!

sysctl -w kernel.core_pattern = / dev / null

iraj norouzi
la source
Merci! Cela fait aussi l'affaire.
Jonathan