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
5 Réponses :
Essayez de lancer Apache Docker Run -D -P Apache code> et connectez-vous à l'intérieur
docker exécuté -it conteneur_id bash code>, puis
strace code> Votre processus Apache . P>
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.
Le problème avec votre combinaison de commandes + strace est que Docker dispose d'un modèle client / serveur, et votre 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 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 Exécuter code> 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 code>. P>
ps code> 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. P>
docker-runc code> 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 code> et le réel
docker-runc code> et des processus associés. Une solution plus élégante peut être de créer une variante de
runc code> 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 code> dans une strace. p>
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.
Je viens de réussir à ranger un conteneur Docker en utilisant ces étapes:
omet de la distribution image que le conteneur est basé sur, puis obtenez le copier le Créez également un petit script shell wrapper appelé strace code> binaire de cette distribution, par ex. En installant le package de distribution correspondant à partir d'un conteneur créé à cette fin. P> li>
strace code> binaire dans un volume que vous pouvez monter dans le conteneur. p> li>
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
Regardez la solution décrite à Ceci est sympa car cela signifie que vous n'avez pas besoin d'installer la strace dans le conteneur Vous souhaitez déboguer. p> Le tripes de celui-ci est que, lors du débogage d'un conteneur ( 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 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 à caddy code> dans l'exemple ci-dessous), vous exécutez un conteneur Docker appelé Strace et avec des outils appropriés installés: < / p>
PS code> et voir le processus dans le conteneur
caddy code> et vous pouvez exécuter la ronde contre IT. P>
/ pr / € pid / root cod> . p> p>
nous pouvons ajouter param
J'ai essayé, ça marche bien !! p> se référer: - Security-Opt = SECCOMP: non confiné code>
N'a pas travaillé pour moi: indicateur inconnu: --Security-opt code>. Docker version 18.06.1-CE, construction E68FC7A.