Docker CMD配置Gunicorn启动Django应用失败的问题求助
问题原因与解决方案
核心问题
你直接调用gunicorn命令时,应用路径的语法格式错误。Gunicorn要求使用模块名:属性名的格式(冒号分隔)来指定WSGI应用,而不是用点分隔的模块名.属性名。
具体解释
- 当你通过
python3 -m gunicorn ... wsgi:application启动时,使用了正确的冒号格式:Gunicorn会导入当前路径下的wsgi模块(对应wsgi.py文件),并获取其中的application对象,所以能正常运行。 - 但你写成
CMD ["gunicorn", ..., "wsgi.application"]时,Gunicorn会错误地将wsgi.application当作一个完整的模块名去查找。由于wsgi.py是单个文件模块,不是Python包,不存在wsgi.application这个子模块,因此抛出ModuleNotFoundError。
修复方案
将Dockerfile中的CMD指令修改为:
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "wsgi:application"]
补充说明
manage.py runserver能正常运行是因为Django的内置命令会自动处理当前工作目录下的模块导入逻辑,不需要遵循Gunicorn的语法规则。
内容的提问来源于stack exchange,提问作者rgralma
相关产品推荐
相关产品推荐

