Рейтинг:2

Контейнер Nginx Docker перестает работать нерегулярно

флаг cn

Сервер:

Я использую Nginx в качестве входного прокси для своего сервера. Nginx работает внутри контейнера Docker.

докер-compose.yml:

 nginx_ingress:
    изображение: nginx: последний
    порты:
      - "80:80"
      - "443:443"
    сети:
      передний уровень: {}
      задний уровень:
        ipv4_адрес: 172.28.1.1
    перезапуск: всегда
    тома:
      - /var/lib/my-server/config/nginx_ingress:/etc/nginx/conf.d
      - /var/lib/my-server/data/certbot/conf:/etc/letsencrypt
      - /var/lib/my-server/data/certbot/www:/var/www/certbot
    команда: "/bin/sh -c 'while:; сделать сон 6 часов и подождать $${!}; nginx -s перезагрузить; сделано & nginx -g \"демон выключен;\"'"

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

Идея состоит в том, что я могу управлять всеми своими сертификатами независимо от другого контейнера. Я не хочу, чтобы на моем хосте что-либо работало (без cronjob), и я не хочу объединять свой контейнер nginx-proxy с контейнером сертификата. Я хочу, чтобы каждая часть головоломки работала независимо. (Я получил идею из этого урока: https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71)

Эта проблема:

Иногда перестает работать прокси (nginx). При этом сам контейнер Docker продолжает работать.

Журналы показывают следующее:

...
2021/10/25 05:51:42 [уведомление] 1#1: получен сигнал 3 (SIGQUIT), завершение работы
2021/10/25 05:51:42 [уведомление] 12#12: корректное завершение работы
2021/10/25 05:51:42 [уведомление] 12#12: выход
25.10.2021, 05:51:42 [уведомление] 13#13: корректное завершение работы
2021/10/25 05:51:42 [уведомление] 12#12: выход
2021/10/25 05:51:42 [уведомление] 13#13: выход
2021/10/25 05:51:42 [уведомление] 13#13: выход
25.10.2021 05:51:42 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 12
2021/10/25 05:51:42 [уведомление] 1#1: рабочий процесс 12 завершился с кодом 0
2021/10/25 05:51:42 [уведомление] 1#1: рабочий процесс 13 завершился с кодом 0
2021/10/25 05:51:42 [уведомление] 1#1: выход
25.10.2021 05:51:44 [уведомление] 1#1: использование метода события "epoll"
2021/10/25 05:51:44 [уведомление] 1#1: nginx/1.21.3
25.10.2021 05:51:44 [уведомление] 1#1: построено с помощью gcc 8.3.0 (Debian 8.3.0-6) 
25.10.2021 05:51:44 [уведомление] 1#1: ОС: Linux 5.4.0-86-универсальная
2021/10/25 05:51:44 [уведомление] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/10/25 05:51:44 [уведомление] 1#1: запустить рабочие процессы
2021/10/25 05:51:44 [уведомление] 1#1: запустить рабочий процесс 9
2021/10/25 05:51:44 [уведомление] 1#1: запустить рабочий процесс 10

С иногда Я имею в виду иногда. Я пока не смог разобрать ни одной закономерности. Сначала я думал, что Nginx отключается каждые 6 часов из-за команда. Но похоже, что это не так. Я сократил время сна до 2 минут, и Nginx продолжал нормально работать в течение нескольких часов. Затем я снова установил время сна на 6 часов, и ровно через 6 часов Nginx перестал работать (см. лог выше). Я перезапустил контейнер Docker и с тех пор Nginx работает (уже прошло более суток). Как видно из следующих логов, в большинстве случаев перезагрузка Nginx работает отлично:

...
25.10.2021, 11:51:44 [уведомление] 19#19: начался сигнальный процесс
25.10.2021 11:51:44 [уведомление] 1#1: сигнал 1 (SIGHUP) получен от 19, реконфигурация
25.10.2021 11:51:44 [уведомление] 1#1: реконфигурация
25.10.2021 11:51:44 [уведомление] 1#1: использование метода события "epoll"
25.10.2021 11:51:44 [уведомление] 1#1: запустить рабочие процессы
25.10.2021 11:51:44 [уведомление] 1#1: запустить рабочий процесс 21
25.10.2021 11:51:44 [уведомление] 1#1: запустить рабочий процесс 22
25.10.2021 11:51:44 [уведомление] 10#10: корректное завершение работы
25.10.2021 11:51:44 [уведомление] 9#9: корректное завершение работы
2021/10/25 11:51:44 [уведомление] 10#10: выход
2021/10/25 11:51:44 [уведомление] 9#9: выход
2021/10/25 11:51:44 [уведомление] 9#9: выход
2021/10/25 11:51:44 [уведомление] 10#10: выход
25.10.2021 11:51:44 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 10
25.10.2021 11:51:44 [уведомление] 1#1: рабочий процесс 9 завершился с кодом 0
25.10.2021 11:51:44 [уведомление] 1#1: рабочий процесс 10 завершился с кодом 0
25.10.2021 11:51:44 [уведомление] 1#1: получен сигнал 29 (SIGIO)
...
...
25.10.2021, 17:51:44 [уведомление] 23#23: начался сигнальный процесс
25.10.2021 17:51:44 [уведомление] 1#1: сигнал 1 (SIGHUP) получен от 23, реконфигурация
25.10.2021 17:51:44 [уведомление] 1#1: реконфигурация
25.10.2021 17:51:44 [уведомление] 1#1: использование метода события "epoll"
25.10.2021 17:51:44 [уведомление] 1#1: запустить рабочие процессы
25.10.2021 17:51:44 [уведомление] 1#1: запустить рабочий процесс 25
25.10.2021 17:51:44 [уведомление] 1#1: запустить рабочий процесс 26
25.10.2021 17:51:44 [уведомление] 22#22: корректное завершение работы
25.10.2021 17:51:44 [уведомление] 21#21: корректное завершение работы
2021/10/25 17:51:44 [уведомление] 21#21: выход
25.10.2021 17:51:44 [уведомление] 22#22: выход
2021/10/25 17:51:44 [уведомление] 21#21: выход
2021/10/25 17:51:44 [уведомление] 22#22: выход
25.10.2021 17:51:44 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 21
25.10.2021 17:51:44 [уведомление] 1#1: рабочий процесс 21 завершился с кодом 0
25.10.2021 17:51:44 [уведомление] 1#1: получен сигнал 29 (SIGIO)
25.10.2021 17:51:44 [уведомление] 1#1: сигнал 17 (SIGCHLD) получен от 22
25.10.2021 17:51:44 [уведомление] 1#1: рабочий процесс 22 завершился с кодом 0
25.10.2021 17:51:44 [уведомление] 1#1: получен сигнал 29 (SIGIO)
...

Мои вопросы:

  1. Что-то не так с команда Я использую? Должен ли контейнер останавливаться, как только останавливается Nginx? (может быть, что-то не так с основным процессом?)
  2. Почему Nginx останавливается нерегулярно? Почему не каждые 6 часов? Вы видите разницу между первым логом и вторым/третьим?
  3. Есть ли у вас какие-либо другие предложения, как я могу перезагрузить Nginx? (как упоминалось выше, мне ничего не нужно на хосте + я не хочу комбинировать контейнеры nginx и certbot, если в этом нет необходимости...)

Спасибо за помощь!

nulldevops avatar
флаг cn
Кажется, теперь это работает. Мне просто нужно `--force-recreate` в моем `docker-compose up`. Если я не принудительно воссоздаю что-то, время от времени nginx просто сбрасывает... Я надеюсь, что это кому-то поможет.
lonix avatar
флаг cn
У меня тоже такая проблема, иногда работает месяцами, а иногда останавливается каждые несколько дней. Я попробую ваш трюк с принудительным воссозданием - спасибо! Но так как вы опубликовали это, вы нашли причину? Это действительно неприятная проблема...
nulldevops avatar
флаг cn
@lonix С тех пор у меня не было никаких проблем. Но я все еще не уверен, что вызвало такое поведение.
lonix avatar
флаг cn
Рад слышать. PS вы не используете стек/рой докеров, не так ли? Да, но мой конфиг похож на ваш. Я обновился до последней версии nginx, в которой есть некоторые исправления, может быть, это поможет!

Ответить или комментировать

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