web-dev-qa-db-fra.com

Comment tuer un processus dans un conteneur? Docker top command

J'ai un exemple simple du guide officiel sur le site Web de docker.

Je lance le suivant:

Sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
a66asdasdhqie123...

Ensuite, prenez une sortie du conteneur créé:

Sudo docker logs a66
hello
hello
hello
...

Ensuite, je recherche les processus en cours d'un conteneur:

Sudo docker top a66
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                25055               15152               0                   20:07               ?                   00:00:00            /bin/sh -c while true; do echo hello world; sleep 1; done
root                25295               25055               0                   20:10               ?                   00:00:00            sleep 1

Ensuite, j'essaie de tuer le premier processus de conteneur:

Sudo docker exec a66 kill -9 25055

Cependant après que je le fais rien ne change. Le processus fonctionne toujours et affiche "hello" toutes les secondes. Qu'est-ce que je me trompe?

11

Quand je reproduis votre situation, je vois différents PID entre docker top <container> et docker exec -it <container> ps -aux. Lorsque vous faites docker exec, la commande est exécutée à l'intérieur du conteneur => doit utiliser le pid du conteneur. Sinon, vous pourriez tuer sans menu fixe directement à partir de l'hôte, dans votre cas: Sudo kill -9 25055.

13
Mykola Gurov

vérifie ça:

ps | grep -i a66 | tr -s ' '|cut -f2 -d' '|
{
    while read line;
    do kill -9 $line;
    done
}

pour comprendre cela, commencez par exécuter des commandes de la gauche à la fin de chaque pipe (|)

Option plus simple:

kill $(pidof a66) 

je cherchais quelque chose comme ça, mais je ne pouvais pas trouver et puis j'ai fait ceci:

[root @ notebook ~] # docker exec -it tadeu_debian ps aux | grep ping | awk '{print $ 2}' | xargs -I {} docker exec -i tadeu_debian kill -9

C'étaient deux "exécutifs" de Docker et un xargs.

Eh bien, j'espère que cela aide quelqu'un! 

0
Tadeu Bernacchi

Il m'a fallu un certain temps pour trouver la bonne réponse, mais vous devrez gérer ce processus à partir du conteneur. Lorsque vous exécutez docker top a66 à partir de l'hôte, les PID proviennent de votre hôte, bien que ce ne soit pas vraiment le cas si vous utilisez Cygwin. Quoi qu'il en soit, vous devrez bash ou ce que vous avez dans votre conteneur et utiliser des commandes telles que ps aux et kill pendant que vous êtes dans le conteneur pour rechercher et gérer les différents PID du même processus.

0
Spencer Williams