Поддерживайте работоспособность контейнеров во время простоя демона

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

Примечание

Динамическое восстановление не поддерживается для контейнеров Windows, но работает для контейнеров Linux, работающих в Docker Desktop для Windows.

Включить динамическое восстановление

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

  • Добавляет конфигурацию в файл конфигурации демона. В Linux это значение по умолчанию /etc/docker/daemon.json. В Docker Desktop для Mac или Docker Desktop для Windows выбрать значок Docker на панели задач, затем щелкните Настройки -> Docker Engine.

  • Используйте следующий JSON, чтобы включить live-restore.

    {
      "live-restore": true
    }
    
  • Перезапустите демон Docker. В Linux вы можете избежать перезапуска (и избежать простоя ваших контейнеров), перезагрузив демон Docker. Если вы используете systemd, используйте команду systemctl reload docker. В противном случае отправить сигнал SIGHUP процессу dockerd.

  • При желании вы можете выполнить процесс dockerd вручную с флагом --live-restore. Данный подход не рекомендуется, поскольку он не настраивает среду, которую systemd или другой менеджер процессов будет использовать при запуске процесса Docker. Это может привести к неожиданному поведению.

Живое восстановление во время обновлений

Динамическое восстановление позволяет поддерживать работу контейнеров в обновлениях демона Docker, но поддерживается только при установке релизов исправлений (YY.MM.x), а не основных (YY.MM) обновлений демона.

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

Живое восстановление после перезагрузки

Опция оперативного восстановления работает только для восстановления контейнеров, если параметры демона, такие как IP-адреса моста и драйвер графа, не изменились. Если какие-либо из данных параметров конфигурации на уровне демона изменились, динамическое восстановление может не работать, и вам может потребоваться вручную останавливает контейнеры.

Влияние оперативного восстановления на работающие контейнеры

Если демон не работает в течение длительного времени, запущенные контейнеры могут заполнить журнал FIFO, который демон обычно читает. Полный журнал не позволяет контейнерам регистрировать больше данных. Размер буфера по умолчанию — 64 КБ. Если буферы заполнены, вы должны перезапустить демон Docker, чтобы очистить их.

В Linux вы можете изменяет размер буфера ядра, изменив /proc/sys/fs/pipe-max-size. Вы не можете изменяет размер буфера в Docker Desktop для Mac или Docker Desktop для Windows.

Живое восстановление и режим роя

Параметр живого восстановления относится только к автономным контейнерам, а не к службам роя. Службы Swarm управляются менеджерами Swarm. Если менеджеры роя недоступны, службы роя продолжают работать на рабочих узлах, но ими нельзя управлять до тех пор, пока не будет доступно достаточное количество менеджеров роя для поддержания кворума.