django in docker не обнаруживает SIGINT - PullRequest
0 голосов
/ 06 февраля 2020

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

Я использую docker - составить, чтобы запустить несколько контейнеров. Два из них используют стандартные postgres и изображения Redis. Остальные django 2.2.9 (и сельдерей) Это среда разработки, и я запускаю их с docker compose, например:

  command: ./manage.py runserver 0.0.0.0:80

docker -compose stop отправляет SIGINT , Контейнеры redis и postgres быстро выходят. контейнеры django этого не делают. docker -компонентная остановка теряет терпение и убивает их.

(и у Пичарма сейчас бесконечное терпение, и он не посылает убийство, пока я его не заставлю).

В этом сообщении за 2015 год со ссылкой на Django 1,9 (http://blog.lotech.org/fix-djangos-runserver-when-run-under-docker-or-pycharm.html) говорится, что

"Быстрое решение заключается в том, чтобы специально слушать SIGINT и SIGTERM в вашем manage.py и sys.kill (), когда вы их получите. Поэтому измените файл manage.py, добавив обработчик сигнала: "

и там написано, как. Исправлено изменение файла manage.py для перехвата SIGINT и работает несколько строк, хотя это не работает для сельдерея, который имеет собственный запуск. Так что я могу перенести свою собственную версию manage.py и починить сельдерей, но неужели это все еще как это исправить?

Я вижу, что в файле docker может быть

STOPSIGNAL SIGINT

, но это не имеет значения, я полагаю, потому что точка входа управляется docker -compose.

1 Ответ

0 голосов
/ 06 февраля 2020

Используйте вариант списка command:

command: ["./manage.py", "runserver", "0.0.0.0:80"]

Подробнее см. https://hynek.me/articles/docker-signals/.

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