unix - terminar - ¿Cómo matar el proceso dentro del contenedor? Comando superior Docker
kill linux (4)
Tengo un ejemplo simple de la guía oficial en el sitio web de Docker.
Ejecuto lo siguiente:
sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"
a66asdasdhqie123...
Luego tome alguna salida del contenedor creado:
sudo docker logs a66
hello
hello
hello
...
Luego busco los procesos en ejecución de un contenedor:
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
A continuación, intento matar el primer proceso de contenedor:
sudo docker exec a66 kill -9 25055
Sin embargo, después de hacerlo, nada cambia. El proceso todavía funciona y muestra "hola" por segundo. ¿Qué hago mal?
Cuando reproduzco su situación, veo diferentes PID entre docker top <container>
y docker exec -it <container> ps -aux
. Cuando haces docker exec
el comando se ejecuta dentro del contenedor => debe usar el pid del contenedor. De lo contrario, podrías matar sin el acoplador directamente desde el host, en tu caso: sudo kill -9 25055
.
Mira esto:
ps | grep -i a66 | tr -s '' ''|cut -f2 -d'' ''|
{
while read line;
do kill -9 $line;
done
}
para entender este comienzo desde la ejecución de comandos desde la izquierda hasta el final de cada tubería (|)
Opción más simple:
kill $(pidof a66)
Me tomó un tiempo encontrar la respuesta correcta, pero tendrá que administrar este proceso desde el contenedor. Cuando ejecuta docker top a66
desde el host, los PID provienen de su host, aunque ese no es el caso si usa Cygwin. De todos modos, tendrá que bash
o lo que tenga que volver a su contenedor y usar comandos como ps aux
y kill
mientras está en el contenedor para buscar y administrar los diferentes PID para los mismos procesos allí.
Estaba buscando algo como esto, pero no pude encontrar y luego hice esto:
[root @ notebook ~] # docker exec -it tadeu_debian ps aux | grep ping | awk ''{print $ 2}'' | xargs -I {} docker exec -i tadeu_debian kill -9
Fueron dos "ejecutivos" de Docker e one xargs.
Bueno, espero que esto ayude a alguien!