Docker运行时出现ModuleNotFoundError: No module named 'flask'问题求助
解决Docker容器中ModuleNotFoundError: No module named 'flask'的问题
问题根源
你采用了Docker多阶段构建,但仅将第一阶段(backend-builder)的代码目录/app复制到了第二阶段,没有同步该阶段安装的Python依赖。Flask等依赖是安装在backend-builder阶段Python环境的site-packages目录下,而非/app内,导致第二阶段运行容器时找不到对应的模块。
解决方案
方案1:完善多阶段构建,同步依赖
修改Dockerfile,在第二阶段同时复制代码和已安装的依赖文件:
# Use an official Python runtime as the base image FROM python:3.9 AS backend-builder # Set the working directory in the container WORKDIR /app # Copy the backend code into the container COPY ./backend /app # Install Python dependencies, including Flask RUN pip install -r requirements.txt #------------------Stage 1 Ends---------------------- #------------------Stage 2 Start--------------------- FROM python:3.9-slim-buster # Set the working directory in the container WORKDIR /app # 复制代码和已安装的依赖包、可执行文件 COPY --from=backend-builder /app /app COPY --from=backend-builder /usr/local/lib/python3.9/site-packages /usr/local/lib/python3.9/site-packages COPY --from=backend-builder /usr/local/bin /usr/local/bin # Expose the port EXPOSE 5000 # Command to run the application CMD ["python", "app.py"]
方案2:改用单阶段构建(适合对镜像体积要求不高的场景)
如果不需要极致压缩镜像大小,可简化为单阶段构建,避免依赖同步问题:
# Use an official Python runtime as the base image FROM python:3.9-slim-buster # Set the working directory in the container WORKDIR /app # Copy the backend code into the container COPY ./backend /app # Install Python dependencies, including Flask RUN pip install -r requirements.txt # Expose the port EXPOSE 5000 # Command to run the application CMD ["python", "app.py"]
验证步骤
- 确认
requirements.txt中包含Flask依赖(例如:Flask>=2.0.0) - 重新构建镜像:
docker build -t my-flask-app . - 启动容器:
docker run -p 5000:5000 my-flask-app
内容的提问来源于stack exchange,提问作者parmar pavan
相关产品推荐
相关产品推荐

