Остановка Docker Desktop с таймаутом
На этом шаге мы научимся останавливать контейнер с заданным временем ожидания, используя флаг -t
или --time
с командой docker stop
. Это позволяет указать, сколько времени Docker должен ждать корректного завершения контейнера после отправки сигнала SIGTERM
, прежде чем принудительно остановить его с помощью SIGKILL
.
Давайте запустим контейнер, который будем останавливать с таймаутом. Используем образ ubuntu
и скрипт, ожидающий сигнала перед завершением.
docker run -d ubuntu sh -c 'trap "exit 0" SIGTERM; sleep infinity'
Эта команда запускает контейнер ubuntu
в detached mode (фоновом режиме). Часть trap "exit 0" SIGTERM
настраивает обработчик, который обеспечивает корректное завершение скрипта при получении сигнала SIGTERM
. sleep infinity
поддерживает работу контейнера до получения сигнала.
Получим ID этого нового контейнера ubuntu
.
docker ps
Вы должны увидеть новый работающий контейнер ubuntu
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<timeout_container_id> ubuntu "sh -c 'trap \"exit 0\"…" X seconds ago Up X seconds <container_name>
<force_stop_container_id> ubuntu "sh -c 'trap \"\" SIGT…" Y minutes ago Exited Y minutes ago <container_name>
<nginx_container_id> nginx "nginx -g 'daemon off" Z minutes ago Exited Z minutes ago 80/tcp <nginx_container_name>
<ubuntu_container_id> ubuntu "sleep infinity" A minutes ago Exited A minutes ago <ubuntu_container_name>
Теперь остановим этот контейнер с таймаутом 5 секунд, используя флаг -t
.
docker stop -t 5 <timeout_container_id>
Docker отправит сигнал SIGTERM
и будет ждать 5 секунд. Поскольку наш контейнер настроен на корректное завершение при получении SIGTERM
, он должен остановиться в течение этого периода. Если остановка не произойдет за 5 секунд, Docker отправит сигнал SIGKILL
.
Проверим, что контейнер остановился.
docker ps
Контейнер больше не должен отображаться в списке работающих.
Использование флага -t
полезно, когда вы хотите дать контейнеру определенное время для выполнения операций очистки перед принудительной остановкой.