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

Docker部署Flask应用启动Gunicorn报错:找不到'app'模块

Flask容器启动报错:ModuleNotFoundError: No module named 'app'

问题描述

执行以下命令启动容器化Python Flask应用:

docker build -t python_offerte_test_v1:latest .
docker-compose up web_prod

运行后出现错误:

ModuleNotFoundError: No module named 'app'

同事运行相同代码可正常启动,但我的容器内/home/code目录为空。

目录结构

- DOCKER-PYTHON
    - offerte_scanner
       - server.py
    - app.py
    - docker-compose.yaml
    - Dockerfile

Dockerfile内容

FROM python:3.8 as python

RUN pip install poetry
RUN mkdir /home/code
ADD ./* /home/code  

# install dependencies
RUN apt-get update \
  && apt-get -y install tesseract-ocr \ 
  && apt-get -y install ffmpeg libsm6 libxext6 # required for opencv\
  && apt-get libmagickwand-dev --no-install-recommends && rm -rf /var/lib/apt/lists/* \
  && apt-get pecl install imagick-6.9 \
  && apt-get docker-php-ext-enable imagick\
  && apt-get install tesseract-ocr-eng  #for english 


#init Poetry
WORKDIR /home/code

RUN poetry config virtualenvs.create false --local
RUN poetry install --only main
RUN apt-get update && apt-get -y install ghostscript && apt-get clean


#Set ImageMagick settings with policy.xml
RUN sed -i 's/^.*policy.*coder.*none.*PDF.*//' /etc/ImageMagick-6/policy.xml

COPY policy.xml /etc/ImageMagick-6/

docker-compose.yaml内容

version: '3'

services:
  web_prod:
    container_name: python_backend_offerte_scanner
    ports:
     - "5555:5000"
    volumes:
     - .:/code/home
    restart: always
    image: python_offerte_test_v1:latest
    working_dir: /code/home
    environment:
      IP_ELASTICSEARCH: <my ip>
    command: python -m gunicorn -w 2 -b 0.0.0.0:5555 app:app

app.py内容

from offerte_scanner.server import app

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

问题分析

  1. 容器内/home/code为空:Dockerfile中ADD ./* /home/code仅复制当前目录下的文件,不会包含子目录(如offerte_scanner),若当前目录存在匹配规则外的文件(比如被.gitignore排除),会导致复制失败。
  2. ModuleNotFoundError:
    • docker-compose的gunicorn命令格式错误,python -m属于冗余写法,会导致命令执行逻辑异常;
    • 挂载本地目录./:/code/home后,若本地目录与镜像内代码结构、依赖路径不匹配,会引发模块查找失败。

解决方案

1. 修复Dockerfile的文件复制逻辑

将ADD ./* /home/code替换为COPY . /home/code,确保复制当前目录下所有文件和子目录:

# 替换原ADD命令
COPY . /home/code

2. 修正gunicorn启动命令

去掉冗余的python -m,调整docker-compose中的command字段:

command: gunicorn -w 2 -b 0.0.0.0:5555 app:app

3. 统一工作目录(可选)

若无需本地代码实时挂载,可移除volumes配置,直接使用镜像内的代码目录,避免路径冲突:

# 移除本地挂载配置
# volumes:
#  - .:/code/home

# 调整工作目录为镜像内代码路径
working_dir: /home/code

4. 验证修复结果

重新构建镜像并启动容器:

docker build -t python_offerte_test_v1:latest .
docker-compose up web_prod

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:41