使用Gunicorn部署Flask应用遇ModuleNotFoundError问题求助
解决Gunicorn Docker环境下模块导入失败问题
问题原因
Gunicorn启动应用时,Python的模块搜索路径(sys.path)可能未包含当前脚本所在目录,或是Docker工作目录与项目结构不匹配,导致无法找到同目录下的db.py模块。
解决方案
方案1:修正Dockerfile的工作目录与文件复制路径
你的项目中server.py和db.py位于/service/app下,当前Dockerfile的WORKDIR /app未对应正确目录位置,调整如下:
# 将项目app目录的内容复制到容器的/app目录 COPY ./service/app /app # 设置工作目录为/app WORKDIR /app # 启动Gunicorn CMD ["gunicorn", "--workers=3", "server:main"]
调整后容器内/app目录直接包含两个脚本文件,Gunicorn启动时会将当前工作目录加入sys.path,即可正常导入db模块。
方案2:在server.py中手动添加模块搜索路径
若不想修改Dockerfile,可在server.py最顶部添加代码,强制将脚本所在目录加入Python模块搜索路径:
import sys import os # 获取当前脚本的所在目录 current_dir = os.path.dirname(os.path.abspath(__file__)) # 将目录加入搜索路径 if current_dir not in sys.path: sys.path.insert(0, current_dir) # 后续正常导入db import db
方案3:将app作为Python包运行
在/service/app目录下创建空的__init__.py文件,标记为Python包,再调整Dockerfile的工作目录和启动命令:
# 将整个service目录复制到容器内 COPY ./service /service # 设置工作目录为项目根目录/service WORKDIR /service # 以包的形式启动应用 CMD ["gunicorn", "--workers=3", "app.server:main"]
同时修改server.py中的导入语句为相对导入:
from . import db
内容的提问来源于stack exchange,提问作者an.abi
相关产品推荐
相关产品推荐

