Detener contenedores Docker por nombre de imagen - Ubuntu
En Ubuntu 14.04 (Trusty Tahr), estoy buscando una manera de detener un contenedor en ejecución y la única información que tengo es el nombre de la imagen que se usó en el comando de ejecución de Docker.
¿Existe un comando para encontrar todos los contenedores en ejecución que coincidan con ese nombre de imagen y detenerlos?
Si conoce la image:tag
versión exacta del contenedor
Después del número 8959 , un buen comienzo sería:
docker ps -a -q --filter="name=<containerName>"
Dado que name
se refiere al contenedor y no al nombre de la imagen, deberá utilizar el filtro ancestral Docker 1.9 más reciente , mencionado en la respuesta de koekiebox .
docker ps -a -q --filter ancestor=<image-name>
Como comenta a continuación Kiril , para eliminar esos contenedores:
stop
devuelve los contenedores también.
Entonces encadenando stop
y rm
hará el trabajo:
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
Si solo conoces el nombre de la imagen (no image:tag
)
Como señala Alex Jansen en los comentarios :
La opción de ancestro no admite la coincidencia de comodines.
Alex propone una solución , pero la que logré ejecutar cuando tienes varios contenedores ejecutándose desde la misma imagen es (en tu, ~/.bashrc
por ejemplo):
dsi() { docker stop $(docker ps -a | awk -v i="^$1.*" '{if($2~i){print$1}}'); }
Luego simplemente llamo a mi sesión de bash (después de obtener ~/.bashrc
):
dsi alpine
Y cualquier contenedor que saliera alpine.*:xxx
se detendría.
Significado: cualquier imagen cuyo nombre comience con alpine
.
Es posible que tengas que modificar el awk -v i="^$1.*"
si lo deseas.^$1.*
ser más preciso.
A partir de ahí, por supuesto:
drmi() { docker rm $(dsi $1 | tr '\n' ' '); }
Y se drmi alpine
detendría y retiraría cualquier alpine:xxx
contenedor.
Las respuestas anteriores no me funcionaron, pero esta sí:
docker stop $(docker ps -q --filter ancestor=<image-name> )
Podrías iniciar el contenedor estableciendo un nombre de contenedor:
docker run -d --name <container-name> <image-name>
La misma imagen podría usarse para activar varios contenedores, por lo que esta es una buena manera de iniciar un contenedor. Entonces podrías usar este nombre de contenedor para detener, adjuntar... el contenedor:
docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>
Este código detendrá todos los contenedores con la imagen centos:6 . No pude encontrar una solución más fácil para eso.
docker ps | grep centos:6 | awk '{print $1}' | xargs docker stop
O incluso más corto:
docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')