Как убить процесс внутри контейнера? Топ-команды докер



У меня есть простой пример из официального руководства на сайте docker.



Я выполняю следующее:



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


Затем возьмите некоторые выходные данные из созданного контейнера:



sudo docker logs a66
hello
hello
hello
...


Затем я ищу запущенные процессы контейнера:



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


Далее я пытаюсь убить первый процесс контейнера:



sudo docker exec a66 kill -9 25055


Однако после того, как я это сделаю, ничего не изменится. Процесс все еще работает и выводит "привет" каждую секунду. Что я делаю не так?
994   4  

4 ответов:

, Когда я воспроизвожу вашу ситуацию я вижу разных Пидов между docker top <container> и docker exec -it <container> ps -aux. Когда вы делаете docker exec команда выполняется внутри контейнера => следует использовать PID контейнера. В противном случае вы могли бы убить без докера прямо из хоста, в вашем случае: sudo kill -9 25055.

Проверьте это:

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

Чтобы понять это, начните с выполнения команд слева до конца каждого канала (|)

Более простой вариант:

kill $(pidof a66) 

Мне потребовалось некоторое время, чтобы найти правильный ответ, но вам придется управлять этим процессом изнутри контейнера. Когда вы запускаете docker top a66 с хоста, PID-это ваш хост, хотя это не совсем так, если вы используете Cygwin. Независимо от этого, вам нужно будет bash или что-у-вас обратно в контейнер и использовать команды, такие как ps aux и kill, находясь в контейнере, чтобы найти и управлять различными PID для тех же процессов там.

Я искал что-то вроде этого, но не смог найти, и тогда я сделал это:

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

Это были два "экзека" из Docker e one xargs.

Ну, я надеюсь, что это кому-то поможет!

Comments

    Ничего не найдено.