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

Docker部署Flask API报错:导入'app'时触发ImportError如何解决

Flask API Docker部署ImportError问题解决方案

核心问题原因

  1. 依赖冲突:requirements.txt中单独安装的bson==0.5.10包和pymongo内置的bson模块冲突,pymongo已经自带bson实现,不需要单独安装,独立安装的bson包不含json_util方法,会触发导入错误。
  2. 不必要文件复制:项目中的本地虚拟环境venv文件夹被复制进Docker镜像,和镜像内的Python环境产生冲突。
  3. 未显式指定Flask入口:Docker运行环境未显式设置FLASK_APP变量,可能出现入口识别异常。

具体解决步骤

1. 修改依赖配置

删除requirements.txt中的bson==0.5.10行,修改后的requirements.txt内容如下:

click==8.0.3
colorama==0.4.4
Flask==2.0.2
Flask-Cors==3.0.10
Flask-PyMongo==2.3.0
itsdangerous==2.0.1
Jinja2==3.0.2
MarkupSafe==2.0.1
pymongo==3.12.1
python-dateutil==2.8.2
six==1.16.0
Werkzeug==2.0.2

2. 新增.dockerignore文件

在项目根目录创建.dockerignore文件,过滤不需要复制到镜像的本地文件:

venv/
__pycache__/
*.pyc
*.pyo
*.pyd
.env
.git
.gitignore

3. 修改Dockerfile配置

显式设置Flask环境变量,避免入口识别异常,可按需选择启动方式:

FROM python:3.8-slim-buster
WORKDIR /api
# 显式指定Flask入口
ENV FLASK_APP=app.py
ENV FLASK_ENV=production
COPY requirements.txt requirements.txt
# 加--no-cache-dir减少镜像体积
RUN pip3 install --no-cache-dir -r requirements.txt
COPY . .
# 开发调试用flask run
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
# 生产环境建议替换为gunicorn,先在requirements.txt加gunicorn==20.1.0,再用下面的CMD
# CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]

4. 重新构建启动镜像

执行以下命令重新构建并启动容器:

# 构建镜像
docker build -t flask-api .
# 启动容器,端口映射可按需修改
docker run -p 5000:5000 flask-api

额外说明

本地环境能正常运行是因为本地虚拟环境的依赖安装顺序和Docker内不同,优先调用了pymongo内置的bson模块,未触发冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:04