【问题标题】:django in docker not detecting SIGINTdocker中的django没有检测到SIGINT
【发布时间】:2020-05-22 09:24:48
【问题描述】:

这是一个有趣的 stackover flow 问题,因为我有一个答案,但答案是几年前的。我找不到太多新的内容,但似乎它会很引人注目。

我正在使用 docker-compose 来启动一些容器。其中两个使用标准的 postgres 和 redis 图像。 其他的是 django 2.2.9(和 celery) 这是一个开发环境,我用 docker compose 启动它们,像这样:

  command: ./manage.py runserver 0.0.0.0:80

docker-compose stop 发送一个 SIGINT。 redis 和 postgres 容器快速退出。 django 容器没有。 docker-compose stop 失去耐心并杀死他们。

(并且 pycharm 目前有无限的耐心,直到我强制它才会发送杀戮)。

这篇 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 的修复程序有效,并且它是少数几行,尽管它不适用于拥有自己的启动的 celery。 所以我可以继承我自己的 manage.py 版本并修复 celery,但这仍然是如何解决这个问题吗?

我看到 dockerfile 可以有

STOPSIGNAL SIGINT

但这并没有什么不同,我想是因为入口点是由 docker-compose 管理的。

【问题讨论】:

标签: python django docker docker-compose


【解决方案1】:

使用command的列表变体:

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

请参阅https://hynek.me/articles/docker-signals/ 了解详细原因。

【讨论】:

猜你喜欢
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2020-10-26
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-05
相关资源
最近更新 更多