You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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无运行容器显示,本质是容器启动失败。

错误原因

  1. 模块路径错误:项目中wsgi.py位于application子目录下,但Dockerfile的启动命令直接指定wsgi:app,Gunicorn会在工作目录/app下查找wsgi模块,无法找到。
  2. 内部导入错误: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模块。

验证步骤

  1. 重新构建镜像:sudo docker build -t flask_api .
  2. 启动容器:sudo docker run -d -p 5000:5000 flask_api
  3. 检查容器状态:docker ps,此时应能看到运行中的容器
  4. 若仍有问题,查看容器日志排查:docker logs <容器ID或名称>

内容的提问来源于stack exchange,提问作者Kabllez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 05:52:49