docker-compose restart policy - отключить экспоненциальную задержку между перезапусками - PullRequest
0 голосов
/ 08 января 2019

У меня есть файл docker-compose для настройки службы с политикой restart, установленной на always

command - python3 script.py

И script.py просто печатает текущую метку времени:

import time

print(time.time())

Используя docker-compose up Я получаю это:

random_service    | 1546974860.1233172
random_service    | 1546974861.9269428
random_service    | 1546974863.616101
random_service    | 1546974865.4225447
random_service    | 1546974867.2077854
random_service    | 1546974869.4796813
random_service    | 1546974873.4290836
random_service    | 1546974880.5541086
random_service    | 1546974894.0697372
random_service    | 1546974920.4050376

Как вы можете видеть, похоже, что чем больше докер пытается перезапустить сервис, тем больше он ожидает между перезапусками. Сначала он пытается каждые одну или две секунды, затем четыре, семь, четырнадцать, двадцать шесть ...

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

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

У вас есть возможность настроить политику перезапуска на уровне docker-compose - https://docs.docker.com/engine/reference/commandline/service_create/:

- условие перезапуска Перезапуск при выполнении условия («нет» | «при сбое» | «любой») (по умолчанию «любой»)

- задержка перезапуска Задержка между попытками перезапуска (ns | us | ms | s | m | h) (по умолчанию 5 с)

- restart-max-попытки Максимальное количество перезапусков перед отказом

- окно перезапуска, используемое для оценки политики перезапуска (ns | us | ms | s | m | h)

Упомянутое поведение при перезапуске задокументировано в https://docs.docker.com/engine/reference/run/#restart-policies---restart:

Постоянно увеличивающаяся задержка (удвоенная по сравнению с предыдущей задержкой, начиная с 100 миллисекунд) добавляется перед каждым перезапуском, чтобы предотвратить переполнение сервера. Это означает, что демон будет ждать 100 мс, затем 200 мс, 400, 800, 1600 и т. Д. До тех пор, пока не будет достигнут предел допустимого отказа или когда вы остановите docker или выполните команду docker rm -f контейнера.

Если контейнер успешно перезапущен (контейнер запускается и работает не менее 10 секунд), для задержки устанавливается значение по умолчанию, равное 100 мс.

У вас все еще есть возможность использовать другой диспетчер процессов в контейнере или в хост-ОС, который может соответствовать вашим потребностям (upstart, systemd, supervisor, monit, ...). Некоторые рекомендации: https://docs.docker.com/config/containers/start-containers-automatically/#use-a-process-manager

0 голосов
/ 08 января 2019

Я только что понял хитрость, которая заключается в удалении политики перезапуска и запуске docker-compose с watch следующим образом:

watch -n 0 docker-compose up

Теперь между каждым запуском проходит ~ 2,5 с.

Итак, на самом деле не очень приятно, что произойдет, если отключится только одна служба (?), Но ближе к тому, что я хочу. Настоящее решение приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...