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

103

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

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

Теги:
docker

10 ответов

110
Лучший ответ

После выпуска 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}}"))
  • 0
    Это замечательно. Моя проблема после этого заключается в удалении контейнеров, так как они не работают, они не возвращаются docker pd. Любые подсказки, как это сделать?
  • 0
    @kiril остановленный контейнер возвращается ps -a . Удаленные контейнеры ... хорошо, они удалены, они больше не существуют.
Показать ещё 2 комментария
48

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

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

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

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

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

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

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

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

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

docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')
  • 1
    нужно улучшить :::: docker stop $ (docker ps -a | grep centos: 6 | awk '{print $ 1}')
  • 0
    @Shaileshkumar Добавил вашу версию =)
8

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

1. $docker stop container_ID

2. $docker kill container_ID

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

$docker ps

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

  • 0
    Последняя ссылка не работает ( «Извините, мы не можем найти эту страницу» ).
  • 0
    Это буквально $docker ? Или $ из командной строки?
1

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

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

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

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

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

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

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

docker stop container-name
docker rm container-name

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

-5

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

docker ps -a

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

  • 0
    Ссылка не работает ( извините, мы не можем найти эту страницу ).
Сообщество Overcoder
Наверх
Меню