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

Docker Compose运行应用时出现Flask模块缺失错误求助

问题分析与解决方案

问题描述

通过Docker Compose部署Flask应用时,容器启动后抛出如下错误:

web-1  | Traceback (most recent call last):
web-1  |   File "/app/app.py", line 1, in <module>
web-1  |     from flask import Flask, request, render_template, redirect, url_for
web-1  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  | ModuleNotFoundError: No module named 'flask'
web-1 exited with code 1

核心原因

  1. requirements.txt格式异常:文件中pymongo前存在多余缩进,pip解析依赖清单时可能出现识别错误,导致Flask依赖未被正确安装。
  2. 目录挂载覆盖依赖:docker-compose.yml中配置了volumes: - .:/app,将本地当前目录直接挂载到容器内的/app目录,覆盖了容器构建阶段已安装好的依赖包(容器内的Python依赖目录被本地无依赖的目录替换)。

解决方案

方案1:修复依赖文件+精准挂载代码

  1. 修正requirements.txt格式:
    移除pymongo前的多余空格,同时确保版本号与包名间无空格,修改后内容如下:

    pymongo
    Flask==2.2.2
    
  2. 调整docker-compose的volume配置:
    仅挂载需要热更新的代码文件,而非整个目录,避免覆盖容器内的依赖环境:

    version: '3'
    services:
      web:
        build: .
        command: python -u app.py
        ports:
          - "5000:5000"
        volumes:
          - ./app.py:/app/app.py
          # 若有templates/static目录,可单独挂载
          # - ./templates:/app/templates
        links:
          - db
      db:
        image: mongo:latest
        hostname: test_mongodb
        environment:
          - MONGO_INITDB_DATABASE=Student_db
          - MONGO_INITDB_ROOT_USERNAME=root
          - MONGO_INITDB_ROOT_PASSWORD=pass
        ports:
          - 27017:27017
    

方案2:保留全目录挂载,启动前重新安装依赖

如果必须挂载整个本地目录,可修改启动命令,在运行应用前强制重新安装依赖:

version: '3'
services:
  web:
    build: .
    command: bash -c "pip install -r requirements.txt && python -u app.py"
    ports:
      - "5000:5000"
    volumes:
      - .:/app
    links:
      - db
  db:
    image: mongo:latest
    hostname: test_mongodb
    environment:
      - MONGO_INITDB_DATABASE=Student_db
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=pass
    ports:
      - 27017:27017

方案3:禁用本地目录挂载(生产环境推荐)

如果不需要本地代码热更新,直接删除docker-compose.yml中的volumes配置,容器将使用构建阶段已安装好的依赖环境:

version: '3'
services:
  web:
    build: .
    command: python -u app.py
    ports:
      - "5000:5000"
    links:
      - db
  db:
    image: mongo:latest
    hostname: test_mongodb
    environment:
      - MONGO_INITDB_DATABASE=Student_db
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=pass
    ports:
      - 27017:27017

验证步骤

  1. 执行docker-compose down清理旧容器与镜像
  2. 执行docker-compose build --no-cache重新构建镜像
  3. 执行docker-compose up启动服务,检查错误是否消除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 22:25:04