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

GCP通过Docker部署Flask应用报No module named 'app'错误

问题根因

触发ModuleNotFoundError: No module named 'app'的核心原因有两个:

  1. Gunicorn启动参数配置错误:你当前的启动命令指定加载app:app,意味着Gunicorn会去寻找名为app的Python模块(要么是app.py文件,要么是带__init__.py的app/文件夹),再从模块中导入名为app的Flask实例,但你的项目里既没有对应路径的app模块,也没有直接暴露的app实例。
  2. 你使用了Flask应用工厂模式(通过create_app()函数初始化app实例),就算模块路径正确,直接用模块名:变量名的写法也无法正确触发工厂函数生成应用实例。另外你之前注释的app:main写法也是错的——main是蓝图对象,不是Flask应用实例,不能作为Gunicorn的加载入口。
修复步骤

推荐按照标准Flask项目结构调整,步骤如下:

  1. 调整项目目录结构
    在Dockerfile所在的项目根目录,新建名为app的文件夹,把现有__init__.py、main.py、auth.py、models.py、templates文件夹、static文件夹全部移动到这个app文件夹内,调整后的目录结构为:
项目根目录/
├── app/                     # 应用核心代码包
│   ├── __init__.py          # 你写create_app工厂函数的文件
│   ├── main.py              # 主路由蓝图
│   ├── auth.py              # 鉴权路由蓝图
│   ├── models.py            # 数据库模型
│   ├── templates/           # 模板文件
│   └── static/              # 静态资源(如果有)
├── requirements.txt         # 依赖清单
└── Dockerfile               # 镜像构建文件
  1. 修改Dockerfile的启动命令
    你原来的Dockerfile里COPY和WORKDIR配置不需要改,只需要把最后一行CMD替换为以下内容,告诉Gunicorn从app包调用create_app工厂函数生成应用实例:
CMD ["gunicorn", "-b", "0.0.0.0:8080", "app:create_app()"]
  1. 校验依赖清单
    确认requirements.txt中已经包含所有必需依赖,至少要有以下包:
Flask
Flask-SQLAlchemy
Flask-Login
gunicorn
额外说明
  • 你当前Dockerfile中先复制requirements.txt安装依赖、再复制全量代码的顺序是正确的,可以充分利用Docker构建缓存,不需要调整。
  • 如果部署后遇到数据库相关问题,注意GCP运行环境中sqlite文件的持久化问题,避免容器重建后数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:24:28