Django开发服务器无法在Docker容器中重新加载

wixjitnu  于 2023-02-11  发布在  Docker
关注(0)|答案(1)|浏览(128)

我在sync版本中使用了docker设置。不幸的是,开发服务器不会在任何代码更改时自动重新启动。这意味着我需要在每次更改时重新启动容器,这是一个麻烦。
我正在使用Windows 10和Docker桌面以及WSL 2引擎。
谢谢你的帮助

njthzxwz

njthzxwz1#

Cookie-cutter django在本地docker容器中使用runserver_plus,因此更广泛地说,问题是“如何让自动重载在WSL 2上的docker中为runserver_plus工作”。
runserver_plus构建于Werkzeug之上,并公开了Werkzeug内置的重载功能,虽然Werkzeug确实支持基于事件的文件系统重载,但当您从主机挂载文件路径时,这在WSL 2中不起作用。
CLI文档中有一个关于这个问题的部分,链接到Werkzeug的自动重载程序文档。这些文档说明您需要stat重载程序,这是一个强力更新检查器,每隔几秒钟统计所有文件以查找更改。您可以显式启用此功能:

python manage.py runserver_plus  --reloader-interval 1 --reloader-type stat ...

(Note 1秒的间隔可能太频繁,请减少到您认为有意义的值。)
特别是在Cookie-cutter Django中,您可以在compose/local/django/start脚本中找到此命令。修改runserver_plus命令,重建映像,然后重新启动容器。
最初的问题并没有问Celery,但是我会注意到cookicutter使用watchfiles来自动重新加载celery工作线程,这在docker+ WSL 2中遇到了同样的问题,并且可以通过设置WATCHFILES_FORCE_POLLING=true(cookicutter中的.envs/.local/.django)来强制使用文件统计轮询。

相关问题