Как убить процесс внутри контейнера? Топ-команды докер
У меня есть простой пример из официального руководства на сайте 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
Однако после того, как я это сделаю, ничего не изменится. Процесс все еще работает и выводит "привет" каждую секунду. Что я делаю не так?
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