Docker部署Flask应用遇ModuleNotFoundError: No module named 'wsgi'求助
解决Docker Flask镜像构建及容器启动失败问题
问题概况
构建Flask项目的Docker镜像时出现错误:ModuleNotFoundError: No module named 'wsgi';执行sudo docker run -d -p 5000:5000 flask_api启动容器后,docker ps无运行容器显示,本质是容器启动失败。
错误原因
- 模块路径错误:项目中
wsgi.py位于application子目录下,但Dockerfile的启动命令直接指定wsgi:app,Gunicorn会在工作目录/app下查找wsgi模块,无法找到。 - 内部导入错误:
wsgi.py中from routes import app的导入方式,在容器工作目录/app下无法找到同目录的routes模块(实际routes.py在/app/application下)。
解决方案
方案一:调整模块引用路径(推荐)
1. 修改wsgi.py的导入语句
将导入改为包含子目录的绝对路径:
from application.routes import app if __name__ == "__main__": app.run()
2. 修改Dockerfile的启动命令
指定正确的模块路径(包含子目录):
# Use a base Python image FROM python:3.8 # Set the working directory WORKDIR /app # Copy the project's requirements and install dependencies COPY requirements.txt requirements.txt RUN pip install -r requirements.txt # Copy the application code into the container COPY . /app # Set the port for the Flask application to run EXPOSE 5000 # Command to start the application(修改为application.wsgi:app) CMD ["gunicorn", "application.wsgi:app", "-b", "0.0.0.0:5000"]
方案二:添加Python路径指向子目录
如果不想修改代码导入,可以通过设置Python路径让Gunicorn找到模块:
修改Dockerfile的启动命令,添加--pythonpath参数指定application目录:
# ... 其他内容不变 ... # Command to start the application CMD ["gunicorn", "--pythonpath", "/app/application", "wsgi:app", "-b", "0.0.0.0:5000"]
此时wsgi.py的from routes import app可以正常找到同目录的routes模块。
验证步骤
- 重新构建镜像:
sudo docker build -t flask_api . - 启动容器:
sudo docker run -d -p 5000:5000 flask_api - 检查容器状态:
docker ps,此时应能看到运行中的容器 - 若仍有问题,查看容器日志排查:
docker logs <容器ID或名称>
内容的提问来源于stack exchange,提问作者Kabllez
相关产品推荐
相关产品推荐

