Docker部署Django应用StatReloader热重载失效问题求助
Docker部署Django应用StatReloader热重载失效解决方案
问题分析
Docker挂载卷的文件系统大多不支持宿主机的inotify事件,而Django默认的StatReloader依赖该事件监听文件变更,导致即使挂载卷同步正常,热重载也无法触发。
解决步骤
1. 切换为PollingReloader(最直接有效)
在启动脚本中添加环境变量指定轮询式重载器,绕过inotify依赖:
export PYTHONUNBUFFERED=1 export DJANGO_RELOADER_CLASS=django.utils.autoreload.PollingReloader python3 manage.py runserver 0.0.0.0:8080
PollingReloader通过定期扫描文件系统检测变更,不受Docker挂载的文件系统限制,能确保主机修改文件后容器立即触发重载。
2. 确认挂载与权限配置
- 确保使用绑定挂载(bind mount)同步主机代码目录到容器,而非匿名/命名卷(这类卷无法实时同步文件变更)。
- 检查容器内运行Django的用户对挂载目录有读权限,可执行
docker exec <容器ID> ls -l /your/app/dir验证。
3. 排查重载开关与DEBUG状态
- 启动命令不要包含
--noreload参数,该参数会完全禁用重载功能。 - 确认
settings.py中DEBUG = True未被环境变量或其他配置覆盖,可通过docker exec <容器ID> python3 manage.py shell -c "from django.conf import settings; print(settings.DEBUG)"验证。
验证方法
修改主机上任意.py文件后,查看容器日志,若出现Watching for file changes with PollingReloader或代码重载相关日志,说明热重载已正常工作。
内容的提问来源于stack exchange,提问作者Aleksa Bajat
相关产品推荐
相关产品推荐

