9
votes

Strace pour surveiller l'activité d'application dockerisé

Mon objectif est de surveiller les ports ouverts et fermés par une application multi-processus. Mon plan consiste à exécuter l'application dans un conteneur Docker, afin de l'isoler, puis utilisez la strace pour signaler l'activité d'application.

J'ai essayé avec Apache Server Dockerisé: P>

strace -f -o /tmp/docker.out docker run -D -P apache


0 commentaires

5 Réponses :


0
votes

Essayez de lancer Apache Docker Run -D -P Apache et connectez-vous à l'intérieur docker exécuté -it conteneur_id bash , puis strace Votre processus Apache .


1 commentaires

Votre suggestion implique que la strace doit être installée dans l'image Docker que je souhaite surveiller, ce qui n'est pas quelque chose que je pourrais assumer.



9
votes

Le problème avec votre combinaison de commandes + strace est que Docker dispose d'un modèle client / serveur, et votre Docker Exécuter représente le côté client d'une transaction API de repos pour demander au Docker Doemon Docker < / Fort> Pour exécuter le conteneur Apache en votre nom. Selon la configuration de la configuration de votre client, ce conteneur peut ne pas être exécuté sur le même système sur lequel vous tapez votre Docker Exécuter la commande .

Toutefois, pour prendre le cas le plus simple où le client Docker et le même démon sont sur le même système, vous pouvez utiliser ps Rechercher le PID du serveur Apache exécuté et utilisez la ronde pour rejoindre et tracer le -Crairement, tant que cela est suffisant pour vos besoins de traçage.

donné que je devais déboguer plusieurs problèmes de démarrage précoce avec "Runc", l'exécuteur des conteneurs de Docker version 1.11 et plus, j'ai également créé un petit wrapper pour docker-runc quelle strace est le conteneur Processus dès le départ (à partir du système extérieur, la strace n'est donc pas nécessaire dans le système de fichiers de conteneur). Vous pouvez le trouver ici sur github , bien que juste avertissement que c'est quelque peu Buggy pour une utilisation régulière, car je pense que l'invocation de la ronde Shell + Strace gère de la signalisation entre conteneurd et le réel docker-runc et des processus associés. Une solution plus élégante peut être de créer une variante de runc qui sait préparer le début réel du processus contenus avec une emballage de la strace plutôt que d'intercepter l'intégralité de l'invocation de runc dans une strace.


1 commentaires

Le docker-Prefix a été supprimé de Docker-Runc. github.com/docker/for-linux/issues/486 donc si quelqu'un Recherche le fichier à remplacer, vous devez rechercher Runc au lieu de Docker-Runc.



2
votes

Je viens de réussir à ranger un conteneur Docker en utilisant ces étapes:

  1. omet de la distribution image que le conteneur est basé sur, puis obtenez le strace code> binaire de cette distribution, par ex. En installant le package de distribution correspondant à partir d'un conteneur créé à cette fin. P> li>

  2. copier le strace code> binaire dans un volume que vous pouvez monter dans le conteneur. p> li>

  3. Créez également un petit script shell wrapper appelé entrée.sh code> qui contient votre Strace code> Invocation. Dans mon cas, je l'ai écrit comme ceci: p>

    strace: …: PTRACE_TRACEME doesn't work: Operation not permitted
    


0 commentaires

6
votes

Regardez la solution décrite à https://medium.com/@rothgar/how-to-debug-a-running-docker-container-de-a-separate-container-983f11740dc6 qui vous indique comment Pour reposer un conteneur avec une strace installée, qui se trouve dans le même espace de noms PID et de réseau que le conteneur / processus que vous souhaitez exécuter de la ronde contre.

Ceci est sympa car cela signifie que vous n'avez pas besoin d'installer la strace dans le conteneur Vous souhaitez déboguer.

Le tripes de celui-ci est que, lors du débogage d'un conteneur ( caddy dans l'exemple ci-dessous), vous exécutez un conteneur Docker appelé Strace et avec des outils appropriés installés: < / p> xxx

en supposant que vous en donniez ainsi lorsque vous construisez votre conteneur de strace, vous aurez maintenant une coquille avec des outils appropriés, à partir duquel vous pouvez exécuter PS et voir le processus dans le conteneur caddy et vous pouvez exécuter la ronde contre IT.

Vous serez dans un conteneur différent, avec un système de fichiers différent, mais vous pouvez voir l'espace de fichier du conteneur cible à / pr / € pid / root .


0 commentaires

1
votes

nous pouvons ajouter param - Security-Opt = SECCOMP: non confiné

J'ai essayé, ça marche bien !! xxx

se référer: http://johntellsall.blogspot.com/2016/ 10 / Conseil-User-Strace-to-Debug-Problèmes-Inside.HTML


1 commentaires

N'a pas travaillé pour moi: indicateur inconnu: --Security-opt . Docker version 18.06.1-CE, construction E68FC7A.