Остановка Docker-контейнеров по имени изображения - Ubuntu

В Ubuntu 14.04 (Trusty Tahr) я ищу способ остановить работающий контейнер, и единственная информация, которую я имею, - это имя образа, которое использовалось в команде запуска Docker.

Есть ли команда, чтобы найти все соответствующие запущенные контейнеры, которые соответствуют этому имени изображения, и остановить их?

Ответ 1

После выпуска 8959 хорошим началом будет:

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

Поскольку name относится к контейнеру, а не к имени изображения, вам нужно будет использовать более поздний предок фильтра Docker 1.9, упомянутый в ответе koekiebox.

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

Как прокомментировал Кирилл ниже, чтобы удалить эти контейнеры:

stop возвращает контейнеры.

Так что цепочка stop и rm сделают свою работу:

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

Ответ 2

Предыдущие ответы у меня не сработали, но это сработало:

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

Ответ 3

Вы можете запустить контейнер, задав имя контейнера:

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

Одно и то же изображение можно использовать для раскрутки нескольких контейнеров, так что это хороший способ запустить контейнер. Затем вы можете использовать это имя контейнера для остановки, прикрепления... контейнера:

docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>

Ответ 4

Этот код остановит все контейнеры с изображением centos: 6. Я не мог найти более простое решение для этого.

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

Или даже короче

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

Ответ 5

Два способа остановить запуск контейнера:

1. $docker stop container_ID

2. $docker kill container_ID

Вы можете запустить запущенные контейнеры, используя следующую команду:

$docker ps

Следующие ссылки для получения дополнительной информации:

Ответ 6

Остановить док-контейнер по имени изображения:

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

Остановите контейнер докера по имени изображения и тегу:

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

Если вы создали изображение, вы можете добавить к нему метку и отфильтровать запущенные контейнеры по метке

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

Ненадежные методы

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

не всегда работает

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

фильтры по имени контейнера, а не по имени изображения

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

проблематично, так как имя изображения может появиться в других столбцах для других изображений

Ответ 7

Я сделал /usr/local/bin/docker.stop, который принимает имя изображения (предполагается, что у вас только один запуск).

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

Ответ 8

В моем случае --filter ancestor=<image-name> не работал, поэтому следующая команда очистила контейнер Docker для меня:

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

Ответ 9

Для Docker версии 18.09.0 я обнаружил, что флаг формата не понадобится

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

Ответ 10

docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")

Этого должно быть достаточно.

Ответ 11

Я пытался обернуть свои команды Docker в задачи gulp и понял, что вы можете сделать следующее:

docker stop container-name
docker rm container-name

Это может не работать для сценариев, в которых у вас есть несколько контейнеров с одним и тем же именем (если это возможно), но для моего варианта использования это было идеально.

Ответ 12

список всех контейнеров с информацией и идентификатором

docker ps

docker stop CONTAINER ID

Ответ 13

Вы можете использовать команду ps чтобы взглянуть на работающие контейнеры:

docker ps -a

Оттуда вы должны увидеть название вашего контейнера вместе с идентификатором контейнера, который вы ищете. Здесь больше информации о docker ps.