web-dev-qa-db-fra.com

Arrêt des conteneurs Docker par nom d'image - Ubuntu

Sous Ubuntu 14.04 (Trusty Tahr), je cherche un moyen d’arrêter un conteneur en cours d’exécution. La seule information dont je dispose est le nom de l’image utilisée dans la commande d'exécution de Docker.

Existe-t-il une commande permettant de rechercher tous les conteneurs en cours d'exécution correspondants correspondant à ce nom d'image et de les arrêter?

126
Collin Estes

Après numéro 8959 , un bon début serait:

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

Puisque name fait référence au conteneur et non au nom de l'image, vous devez utiliser le plus récent ancêtre du filtre Docker 1.9 , mentionné dans koekiebox 's réponse .

docker ps -a -q  --filter ancestor=<image-name>

Comme indiqué ci-dessous par kiril , pour supprimer ces conteneurs:

stop renvoie également les conteneurs.

Donc, chaîner stop et rm fera l'affaire:

docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
166
VonC

Les réponses précédentes ne fonctionnaient pas pour moi, mais cela ne fonctionnait pas:

docker stop $(docker ps -q --filter ancestor=<image-name> )
54
Koekiebox

Vous pouvez démarrer le conteneur en définissant un nom de conteneur:

docker run -d --name <container-name> <image-name>

La même image peut être utilisée pour faire tourner plusieurs conteneurs. C’est donc un bon moyen de démarrer un conteneur. Vous pouvez ensuite utiliser ce nom de conteneur pour arrêter, attacher ... le conteneur:

docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>
36
Javier Sánchez

Ce code va arrêter tous les conteneurs avec l'image centos: 6. Je ne pouvais pas trouver une solution plus facile pour cela.

docker ps | grep centos:6 | awk '{print $1}' | xargs docker stop

Ou même plus court:

docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')
13
ArgonQQ

Deux façons d'arrêter de faire fonctionner un conteneur:

1. $docker stop container_ID

2. $docker kill container_ID

Vous pouvez obtenir des conteneurs en cours d'exécution à l'aide de la commande suivante:

$docker ps

Liens suivants pour plus d'informations:

10
kalyani chaudhari

liste tous les conteneurs avec info et ID

docker ps

docker stop CONTAINER ID
3
Muhammed Moussa

Arrêtez le conteneur Docker par nom d'image:

imagename='mydockerimage'
docker stop $(docker ps | awk '{split($2,image,":"); print $1, image[1]}' | awk -v image=$imagename '$2 == image {print $1}')

Arrêtez le conteneur Docker par nom d'image et étiquette:

imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename '$2 == image {print $1}')

Si vous avez créé l'image, vous pouvez y ajouter label et filtrer les conteneurs en cours d'exécution par étiquette.

docker ps -q --filter "label=image=$image"

Méthodes non fiables

docker ps -a -q  --filter ancestor=<image-name>

ne fonctionne pas toujours

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

filtres par nom de conteneur, pas de nom d'image

docker ps | grep <image-name> | awk '{print $1}'

est problématique car le nom de l'image peut apparaître dans d'autres colonnes pour d'autres images

2
Jay

Pour Docker version 18.09.0, j'ai constaté que l'indicateur de format ne serait pas nécessaire.

docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))
1
ankitj

Dans mon cas, --filter ancestor=<image-name> ne fonctionnait pas. La commande suivante a donc nettoyé le conteneur Docker pour moi:

docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))
1
Alexey
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")

Cela devrait suffire.

J'ai créé un /usr/local/bin/docker.stop qui prend le nom de l'image (en supposant que vous n'en avez qu'un en cours d'exécution).

docker stop $(docker ps -q -f "name=$1")
1
AmanicA

J'essayais d'encapsuler mes commandes Docker dans des tâches gulp et me suis rendu compte que vous pouvez effectuer les opérations suivantes:

docker stop container-name
docker rm container-name

Cela pourrait ne pas fonctionner dans les cas où plusieurs conteneurs portent le même nom (si cela est possible), mais dans mon cas d'utilisation, c'était parfait.

0
Matt Gaunt