В этой статье по Docker обсуждаются способы остановки одного Docker-контейнера, нескольких Docker-контейнеров или всех запущенных Docker-контейнеров одновременно. Вы также научитесь грациозно останавливать Docker контейнер.
Чтобы остановить контейнер Docker, все, что вам нужно сделать, это использовать идентификатор контейнера или имя контейнера следующим образом:
docker stop container_ID_or_name
Вы также можете использовать команду docker container stop container_id_or_name, но это еще одно слово в команде, которое не дает никаких дополнительных преимуществ, поэтому придерживайтесь docker stop.
Но есть еще кое-что, что нужно знать об остановке Docker-контейнера, особенно если вы новичок в Docker.
В этой статье мы расскажем о различных аспектах остановки Docker-контейнера:
Прежде чем вы увидите это, вы должны знать, как получить имя контейнера или идентификатор.
Вы можете получить список всех запущенных контейнеров Docker с помощью команды docker ps. Без каких-либо опций команда docker ps показывает только запущенные контейнеры.
abhishek@linuxhandbook:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1bcf775d8cc7 ubuntu "bash" 8 minutes ago Up About a minute container-2 94f92052f55f debian "bash" 10 minutes ago Up 10 minutes container-1
Вывод также дает вам имя контейнера и идентификатор контейнера. Вы можете использовать любой из этих двух, чтобы остановить контейнер.
Теперь давайте остановимся на контейнерах.
Чтобы остановить определенный контейнер, используйте его идентификатор или имя с командой docker stop:
docker stop container_name_or_ID
Вывод должен быть более описательным, но он просто показывает имя контейнера или идентификатор, какой бы вы ни указали:
abhishek@itsfoss:~$ docker stop 1bcf775d8cc7 1bcf775d8cc7
Вы можете использовать команду docker stop для уже остановленного контейнера. Он не будет выдавать никаких ошибок или другого выхода.
Вы можете проверить, остановлен ли контейнер, с помощью команды docker ps -a. Опция -a показывает все контейнеры, запущены они или остановлены.
abhishek@itsfoss:~$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1bcf775d8cc7 ubuntu "bash" 19 minutes ago Exited (0) About a minute ago container-2 94f92052f55f debian "bash" 29 minutes ago Up 29 minutes container-1
Если статус «Выход», это означает, что контейнер больше не работает.
Вы также можете остановить несколько Docker-контейнеров одновременно. Вы просто должны предоставить имена контейнеров и идентификаторы.
docker stop container_id_or_name_1 container_id_or_name_2 container_id_or_name_3
Как и ранее, вывод будет просто отображать имя или идентификатор контейнеров:
abhishek@itsfoss:~$ docker stop container-1 container-2 container-3 container-1 container-2 container-3
До сих пор вы видели, как останавливали контейнеры, явно указав их имя или идентификатор.
Что если вы хотите остановить все запущенные контейнеры определенного образа Docker? Представьте себе сценарий, в котором вы хотите удалить образ докера, но вам придется остановить все связанные запущенные контейнеры.
Вы можете предоставить имена контейнеров или идентификаторы один за другим, но это отнимает много времени. Что вы можете сделать, так это отфильтровать все работающие контейнеры на основе их базового образа.
Просто замените IMAGE_NAME именем вашего образа докера, и вы сможете остановить все запущенные контейнеры, связанные с этим образом.
docker ps -q --filter ancestor=IMAGE_NAME | xargs docker stop
Опция -q показывает только идентификатор контейнера. Благодаря замечательной команде xargs эти идентификаторы контейнера передаются в качестве аргумента до остановки докера.
Вы можете столкнуться с ситуацией, когда вам необходимо остановить все работающие контейнеры.
Для этого вы можете использовать нечто похожее на то, что вы видели в предыдущем разделе. Просто удалите часть изображения.
docker ps -q | xargs docker stop
Если честно, docker по умолчанию корректно останавливает контейнер. Когда вы используете команду docker stop, она дает контейнеру 10 секунд, прежде чем принудительно убить его.
Это не значит, что для остановки контейнера всегда требуется 10 секунд. Просто если в контейнере запущены некоторые процессы, у него есть 10 секунд, чтобы остановить процесс и выйти.
Команда остановки Docker сначала отправляет команду SIGTERM. Если конейнер останавливается в этот период, он отправляет команду SIGKILL.
Процесс может игнорировать SIGTERM, но SIGKILL немедленно завершит процесс.
Вы можете изменить этот льготный период в 10 секунд с помощью опции -t. Предположим, вы хотите подождать 30 секунд, прежде чем остановить контейнер:
docker stop -t 30 container_name_or_id
В конце…
Мы думаем, что эта большая информация охватывает тему очень хорошо. Вы знаете много вещей об остановке контейнера докера.
Следите за новыми статьями по docker. Если у вас есть вопросы или предложения, пожалуйста, дайте нам знать в разделе комментариев.