одна команда для остановки и удаления контейнера докера


138

Есть ли какая-нибудь команда, которая может объединить команду docker stopи docker rmкоманду вместе? Каждый раз, когда я хочу удалить работающий контейнер, мне нужно последовательно выполнять 2 команды. Интересно, может ли объединенная команда упростить этот процесс?

docker stop CONTAINER_ID
docker rm CONTATINER_ID

2
Это зависит от контейнера: ctl.io/developers/blog/post/…
VonC

Ответы:


238

Ты можешь использовать :

docker rm -f CONTAINER_ID

Он удалит контейнер, даже если он все еще работает.

https://docs.docker.com/engine/reference/commandline/rm/

Вы также можете запустить ваши контейнеры с --rmопцией, они будут автоматически удалены при остановке.

https://docs.docker.com/engine/reference/run/#clean-up-rm

Edit:rm -f может быть опасно для ваших данных и лучше всего подходит для тестирования или разработки контейнеров. Комментарий @ Бернарда на эту тему стоит прочитать.


16
Быть осторожен. docker rm -fотправляет сигнал SIGKILL в контейнер. Это может не позволить контейнеру правильно сохранить свое состояние. Для не контейнеров без гражданства один действительно должны использовать docker stopзатем docker rm. Это отправляет сигнал SIGTERM, который по умолчанию дает контейнерам максимум 10 секунд, чтобы выполнить их отключение, прежде чем демон Docker наконец отправит SIGKILL.
Бернард

3
Я нахожу опцию --rm наиболее подходящей для недолговечных контейнеров.
Прашант Синха

30
docker stop CONTAINER_ID | xargs docker rm

Умная идея Мне это нравится, поскольку его можно использовать и для других команд, когда вы хотите передать аргумент двум командам, не повторяя их или не используя переменную.
Лев

16

Вы можете остановить и удалить контейнер с помощью одной команды, которая $_дает вам последнее эхо

docker stop CONTAINER && docker rm $_

7

В моем случае для удаления всех запущенных контейнеров я использовал

docker rm -f $(docker ps -a -q); docker rmi $(docker images -q)



2

Это остановит и удалит все образы, включая запущенные контейнеры, так как мы используем -f

docker rmi -f $(docker images -a -q)

1

Используйте команду docker ps с флагом -a, чтобы найти имя или идентификатор контейнеров, которые вы хотите удалить.

docker ps -a

Чтобы удалить: $ docker rm ID_or_Name ID_or_Name

Удалить контейнер при выходе:

Если вы знаете, что при создании контейнера вам не захочется его хранить, как только вы закончите, вы можете запустить docker run --rm, чтобы автоматически удалить его при выходе.

Запустите и удалите: docker run --rm image_name

Удалить все вышедшие контейнеры:

Вы можете найти контейнеры с помощью docker ps -a и отфильтровать их по статусу: создан, перезапущен, запущен, приостановлен или завершен. Чтобы просмотреть список вышедших контейнеров, используйте флаг -f для фильтрации по статусу. Когда вы подтвердите, что хотите удалить эти контейнеры, используйте -q для передачи идентификаторов команде docker rm.

Список:

docker ps -a -f status=exited

docker rm $(docker ps -a -f status=exited -q)

Удалить контейнеры, используя более одного фильтра :

Фильтры Docker можно комбинировать, повторяя флаг фильтра с дополнительным значением. Это приводит к списку контейнеров, которые удовлетворяют любому условию. Например, если вы хотите удалить все контейнеры, помеченные как Созданные (состояние, которое может возникнуть при запуске контейнера с недопустимой командой) или Выходные, вы можете использовать два фильтра:

docker ps -a -f status=exited -f status=created

Остановите и удалите все контейнеры:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

0

Для удаления одного контейнера

docker rm -f CONTAINER_ID

Для удаления всех контейнеров

docker rm -f `docker container ps -qa`

0

Удалить все остановленные контейнеры docker system prune

Чтобы остановить живой контейнер, docker stop CONTAINER_IDждет 10 секунд и он вызываетdocker kill CONTAINER_ID

Или docker kill CONTAINER_ID, вы можете немедленно остановить контейнер

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.