Мы запускаем режим Docker swarm в продакшене, имея 4 узла, 3 из которых имеют статус менеджера. Мы заметили, что раз в несколько дней все контейнеры на одном из хостов перезапускаются.
Я заглянул в системный журнал в то время и смог увидеть следующие сообщения (повторяющиеся для всех контейнеров, которые запланированы на этот хост):
Jan 26 07:26:14 HOST0 dockerd[13104]: time="2019-01-26T07:26:14.954777646Z" level=warning msg="failed to deactivate service binding for container service_container.1.lhc0gejxgb8y340bg9o2wfcm2" error="No such container: service_container.1.lhc0gejxgb8y340bg9o2wfcm2" module=node/agent node.id=2g08blfds9z26ja2ou06pv2zl
Перед этим есть несколько сообщений, связанных с членством в роях, но они также происходят без проблем и в любом случае находятся на level = info.
Важно отметить, что на некоторых хостах у нас есть службы с отслеживанием состояния с одним экземпляром, например базы данных.
Пока мне нужно понять, что запускает воссоздание сервисов и как этого избежать. Есть ли что-нибудь особенное, с чего я могу начать поиск в журналах?
Заранее большое спасибо!
Предлагаю начать с задач перезапущенной службы. Это должно дать повод для выхода, а код выхода процесса PID 1 контейнера.
docker service ps $SERVICE_NAME
перечислит 5 последних задач сервиса (или любые другие задания истории).
Возьмите идентификатор выходящей задачи и воспользуйтесь docker inspect $TASK_ID
, чтобы получить подробности.