Detener contenedores Docker por nombre de imagen - Ubuntu

Resuelto Collin Estes asked hace 9 años • 21 respuestas

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?

Collin Estes avatar Aug 18 '15 20:08 Collin Estes
Aceptado

Si conoce la image:tagversión exacta del contenedor

Después del número 8959 , un buen comienzo sería:

docker ps -a -q --filter="name=<containerName>"

Dado que namese 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:

stopdevuelve los contenedores también.

Entonces encadenando stopy rmhará 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, ~/.bashrcpor 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.*:xxxse 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 alpinedetendría y retiraría cualquier alpine:xxxcontenedor.

VonC avatar Aug 18 '2015 13:08 VonC

Las respuestas anteriores no me funcionaron, pero esta sí:

docker stop $(docker ps -q --filter ancestor=<image-name> )
Koekiebox avatar Jan 20 '2016 12:01 Koekiebox

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>
Javier Sánchez avatar Apr 14 '2016 16:04 Javier Sánchez

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}')
ArgonQQ avatar Jun 14 '2016 04:06 ArgonQQ