Это забавный вопрос о переходе через стек, потому что у меня есть ответ, но ответу уже несколько лет. Я не могу найти много контента, который является новым, но кажется, что это будет довольно громкий профиль.
Я использую 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.