it-git.ru
  • Windows
  • Linux
  • Виртуализация
  • Скрипты
  • Почта/Домены
  • Сеть и коммутация
  • Программное обеспечение
  • Безопасность
  • 📰

Как автоматически перезапускать упавшие Docker-контейнеры с помощью скрипта

Скрипты

Если вы работаете с Docker, то наверняка сталкивались с ситуацией, когда один или несколько контейнеров неожиданно завершают работу и переходят в состояние Exited. Это может быть связано с ошибками в приложении, истечением ресурсов или просто сбоями в работе сервиса.

В этой статье мы расскажем, как автоматически отслеживать такие контейнеры и перезапускать их с помощью простого bash-скрипта. Также вы узнаете о дополнительных возможностях Docker, которые позволяют избежать ручного вмешательства.

Почему контейнеры падают?

Перед тем как переходить к решению, важно понимать, почему контейнеры закрываются:

  • Ошибка в коде (например, crash приложения)
  • Нехватка ресурсов (памяти, дискового места)
  • Сбой внешнего сервиса
  • Завершение основного процесса внутри контейнера

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

Решение: скрипт для перезапуска упавших контейнеров

Ниже представлен bash-скрипт, который проверяет статус всех контейнеров и перезапускает те, что находятся в состоянии Exited.

Bash-скрипт

#!/bin/bash

# Получаем список ID контейнеров в состоянии Exited
exited_containers=$(docker ps -f "status=exited" --format "{{.ID}}")

if [ -z "$exited_containers" ]; then
  echo "[$(date)] Нет упавших контейнеров."
else
  echo "[$(date)] Перезапускаем следующие контейнеры: $exited_containers"
  for container_id in $exited_containers; do
    docker restart "$container_id"
  done
fi

Как использовать:

  1. Сохраните скрипт в файл, например restart_exited.sh.
  2. Сделайте его исполняемым:
    chmod +x restart_exited.sh
    
  3. Протестируйте запуск:
    ./restart_exited.sh
    

Как автоматизировать выполнение скрипта?

Для регулярной проверки состояния контейнеров добавьте скрипт в cron.

Добавление в crontab:

  1. Откройте редактор:
    crontab -e
    
  2. Добавьте строку (например, для запуска каждые 5 минут):
    */5 * * * * /путь/к/restart_exited.sh >> /var/log/docker_restart.log 2>&1
    

Теперь ваш сервер будет сам проверять и восстанавливать работоспособность контейнеров.


  • 16.05.2025
  • 4
  • 0
Заметки по докеру
Заметки по докеру
1-09-2023, 17:25, Linux
Docker: Подробное описание
Docker: Подробное описание
24-04-2025, 08:41, Программное обеспечение
Установка Docker - ProxMox 7 LXC
Установка Docker - ProxMox 7 LXC
19-04-2023, 15:33, Виртуализация
DNS: Как работает система доменных имен и зачем она нужна
DNS: Как работает система доменных имен и зачем она нужна
25-03-2025, 10:33, Сеть и коммутация
Docker, scripts, bash, restart
  • Windows
  • Linux
  • Виртуализация
  • Скрипты
  • Почта/Домены
  • Сеть и коммутация
  • Программное обеспечение
  • Безопасность
  • Active Directory
  • ▒ IT Новости
AD astra cisco cmd debian Docker Exchange firewall hp interface linux LXC Mail mikrotik network ovirt ProxMox PVE radius raid route router RouterOS s3 vpn windows Россия база данных безопасность виртуализация данные диск защита копирование массив надежность настройка программный райд скрипт файл
Показать все теги

Что такое IT-GIT?

«IT» — это не просто технологии, а целый мир инноваций и решений, направленных на преодоление сложностей. Мы представляем экспертность в области информационных технологий и широкой технологической экосистемы, стремясь к постоянному развитию и совершенствованию.

«Git» — это отсылка к одной из самых популярных систем контроля версий, которая обеспечивает эффективное сотрудничество, быструю итерацию и надежное управление сложными проектами. Мы стремимся объединить и поделиться опытом и идеями специалистов в сфере технологий, создавая пространство для обмена знаниями.

Инновационные технологии + совместный опыт экспертов в области технологий = путь к успеху!


  • ◆ Полезное
  • ▻ Заметки по докеру
  • ▻ Процесс расширения LVM на примере виртуальной машины
  • ▻ Расширение раздела на HDD/SSD
  • ▻ Ремонт файловой системы linux
  • ▻ Коды символов Юникода в UTF-8
  • ▻ Загрузка CHR RouterOS
  • ▻ #mikrotik
  • ▻ #zfs

  • ★ TOP 20
  • ☆ Шпаргалка по ZFS
  • ☆ Robocopy — описание и примеры использования
  • ☆ Настройка сети через командную строку и BAT файл
  • ☆ Для чего нужен протокол STP/RSTP на примере Mikrotik
  • ☆ Мигрируем на Exchange с почты для домена (yandex, mail, google и др.)
  • ☆ Как подключить сетевой диск всем пользователям с использованием AD
  • ☆ НP ProCurve. наиболее часто используемые команды консоли.
  • ☆ Сброс пароля Windows 10 с помощью встроенной учетной записи Администратора
  • ☆ Настройка условной пересылки DNS-запросов в Mikrotik RouterOS
  • ☆ Как создать программный RAID 1 массив (зеркало) средствами Windows 10, 8.1, 8, 7, Vista
  • ☆ Проверить, запущена ли программа
  • ☆ Не работает fetch в netwatch Mikrotik (ROS 7.13)
  • ☆ Как создать RAID 1 из уже заполненного диска на Windows 10, 8.1, 8, 7, Vista
  • ☆ Mikrotik (vpn server) + Windows server 2008r2 (ad, radius server)
  • ☆ Отечественная виртуализация - на чем построена, обзор, сравнение.
  • ☆ Ремонт файловой системы linux
  • ☆ Сравнение решений WireGuard
  • ☆ Увеличение zfs диска (ISCSI FreeNAS)
  • ☆ Mikrotik, 3 провайдера, переключение и разделение трафик
  • ☆ Полезности Mikrotik
Monitorus. Мониторинг сайтов и серверов.
 
  Top.Mail.Ru      © 2019-2025.    www.IT-GIT.ru    ✉ info@it-git.ru