Простой перезапуск Docker-движка может решить многие проблемы, мешающие работе с контейнерами. Мелкие и серьезные проблемы часто возникают из-за того, что Docker не загружается должным образом при запуске. Docker предлагает несколько способов перезапуска демона Docker, например с помощью команды systemctl restart docker .
Из этого руководства вы узнаете, зачем и когда нужно перезапускать Docker и как это сделать разными способами.
Необходимые условия
На вашем компьютере с Linux должен быть установлен Docker.
Зачем нужно перезапускать Docker?
Не все проблемы с Docker можно решить перезапуском. Однако перезапуск Docker может помочь в трех случаях.
1. Применение изменений в конфигурации: Многие компоненты Docker, такие как драйверы хранения данных, параметры безопасности и сетевые настройки, настраиваются в файле daemon.json, расположенном по адресу /etc/docker/daemon.json. Этот файл содержит все параметры, определяющие работу и существование контейнеров.
Перезапуск Docker активирует демон Docker, который прочитает все новые измененные и примененные изменения.
2. Устранение неполадок в работе: При выполнении команды docker ps отображаются все запущенные контейнеры и их текущее состояние. Запущены или остановлены. В запущенных контейнерах часто возникают незначительные проблемы, связанные с некорректной работой демона Docker. В контейнерах могут возникать следующие проблемы:
- Неправильные настройки
- Проблемы с ресурсами
- Неработающие службы
Перезапуск Docker позволяет очистить временные состояния, сбросить сетевые конфигурации и освободить заблокированные ресурсы. Это позволяет очистить состояние демона Docker и всех запущенных контейнеров.
3. Очистка системных ресурсов: Команда systemctl restart docker эффективно решает проблемы с ресурсами. При перезапуске Docker запущенные контейнеры останавливаются, а память освобождается. Но самое важное — это очистка кэшированных данных, которые больше не нужны, и снижение нагрузки на процессор.
Как перезапустить Docker
Ниже приведены два способа перезапуска Docker.
1. Перезапуск Docker путем остановки и запуска процессов
Команда systemctl stop docker останавливает демон Docker, контейнеры и сервисы Docker. Это позволяет временно освободить системные ресурсы.
sudo systemctl stop docker
При остановке служб Docker вы получите следующий результат.

После остановки Docker используйте следующую команду, чтобы снова запустить Docker. Процессы Docker перезапустятся, и все функции Docker станут доступны.
sudo systemctl start docker
Если вы используете команду sudo systemctl status docker, то получите сообщение о том, что демон Docker запущен и работает.

2. Перезапуск Docker с помощью команды restart Docker
Docker предлагает простой способ перезапуска процессов Docker с помощью следующей команды. Команда systemctl restart docker представляет собой комбинацию команд systemctl start docker и systemctl stop docker.
При раздельной остановке и запуске процессов Docker возникает задержка, во время которой Docker останавливается и его необходимо запускать вручную. Это может привести к более длительному простою в зависимости от того, насколько быстро вы введете команду запуска. Для перезапуска Docker используйте следующую команду.
sudo systemctl restart docker
Если вы проверите логи службы Docker с помощью команды journalctl -u docker.service, то увидите следующий вывод, свидетельствующий о том, что Docker запланирован к перезапуску:

Правила перезапуска контейнеров Docker
Не следует многократно перезапускать процессы Docker. Помимо перезапуска Docker, вы можете настроить политики перезапуска контейнеров, чтобы сократить количество перезапусков Docker. Иногда проблемы с Docker могут быть вызваны сбоем одного контейнера. Контейнеры могут останавливаться по разным причинам, например из-за непредвиденных ошибок или внешних проблем.
Политики перезапуска контейнеров позволяют определить, что происходит в случае сбоя контейнера или перезапуска Docker. Вы всегда можете перезапустить контейнер в случае сбоя.
Это сводит к минимуму время простоя, поскольку контейнеры будут работать постоянно.
Кроме того, вам не придется перезапускать контейнеры вручную.
Используйте следующую команду, чтобы запустить контейнер в случае его выхода из строя.
docker update --restart=always [my-container]
Факторы, которые следует учитывать при перезапуске или остановке Docker
Прежде чем пытаться перезапустить службы Docker или контейнер, необходимо понять, какие риски могут возникнуть при неосторожном выполнении команды restart docker. При перезапуске во время работы критически важных служб могут быть потеряны данные и повреждены процессы. Службы приложений зависят друг от друга. Если основная служба не работает, зависимые службы тоже не будут работать.
При перезапуске Docker все несохраненные изменения будут удалены. Образы, созданные локально и не отправленные в реестр, могут быть потеряны при очистке хранилища Docker. Перезапуск Docker должен быть запланированным процессом. Важно знать, какие сервисы будут затронуты при остановке контейнеров во время перезапуска. Это поможет вам понять, произойдет ли простой.
Контейнеры Docker и процессы должны корректно завершать работу, чтобы предотвратить повреждение данных. При резком завершении работы контейнера процессы в нем завершают транзакции не полностью.
Помимо временного хранилища, Docker может назначать контейнерам новые IP-адреса при перезапуске, что влияет на сетевые конфигурации. Возможно, вам потребуется проверить сетевые настройки после перезапуска Docker.
Заключение
Перезапуск Docker решает только незначительные и временные проблемы. Если перезапуск Docker не помог решить проблему, необходимо проанализировать логи, чтобы выявить сложные ошибки, приводящие к сбоям. Docker — это динамичная и обширная архитектура, проблемы в которой могут быть вызваны различными неисправностями компонентов.
Периодически возникающие проблемы, такие как нехватка памяти и вычислительных ресурсов, требуют постоянного облачного хранения данных и вычислительных мощностей. Когда контейнерам не хватает ресурсов, процессы, зависящие от этих ресурсов, завершаются сбоем. Использование собственных серверов и хранилищ для ресурсов Docker требует больших затрат и усилий.