Docker启动项目遇ModuleNotFoundError:如何修复Dockerfile?
修复Dockerfile解决ModuleNotFoundError问题
错误原因
非Docker环境能正常运行,但Docker镜像中缺少项目本地的CV模块目录——你当前的Dockerfile仅复制了server.py、pyproject.toml和.python-version,没有将包含CV模块的目录拷贝到镜像内,导致Python无法找到该模块。
修复方案
修改Dockerfile,在第二个构建阶段添加对CV目录的拷贝操作,或者直接拷贝整个项目的必要文件(需配合.dockerignore排除无关文件)。
修改后的Dockerfile
FROM ubuntu:24.04 as build WORKDIR /project/ RUN apt-get update RUN apt-get install -y curl RUN apt-get install ffmpeg libsm6 libgl1 libxext6 -y RUN curl -LsSf https://astral.sh/uv/install.sh | sh COPY pyproject.toml /project/ COPY .python-version /project/ RUN $HOME/.local/bin/uv sync FROM build # 先拷贝CV模块目录到镜像中 COPY CV/ /project/CV/ # 再拷贝server.py COPY server.py /project/ CMD $HOME/.local/bin/uv run python -OO server.py
可选优化(如果项目有多个本地模块)
如果项目包含多个本地模块或配置文件,可直接拷贝整个项目目录(推荐配合.dockerignore排除__pycache__、.git、venv等无关内容):
FROM ubuntu:24.04 as build WORKDIR /project/ RUN apt-get update RUN apt-get install -y curl RUN apt-get install ffmpeg libsm6 libgl1 libxext6 -y RUN curl -LsSf https://astral.sh/uv/install.sh | sh COPY pyproject.toml /project/ COPY .python-version /project/ RUN $HOME/.local/bin/uv sync FROM build # 拷贝整个项目目录(需提前配置.dockerignore) COPY . /project/ CMD $HOME/.local/bin/uv run python -OO server.py
补充说明
- 确保你的
.dockerignore文件中没有排除CV目录,否则COPY指令会忽略它; - 若
pyproject.toml中未声明本地模块,需添加如下配置(非Docker环境正常的话大概率已配置):[project] packages = ["CV"]
内容的提问来源于stack exchange,提问作者art-kors
相关产品推荐
相关产品推荐

