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

Docker容器运行报错ModuleNotFoundError:缺失ultralytics模块

问题排查:Docker容器运行时提示ModuleNotFoundError: No module named 'ultralytics'

问题描述

构建包含机器学习模型API的Docker镜像成功,但运行容器后立即停止,日志报错ModuleNotFoundError: No module named 'ultralytics',相关报错信息:

Downloading: "https://github.com/ultralytics/yolov5/zipball/master" to /root/.cache/torch/hub/master.zip

Traceback (most recent call last):
  File "/usr/local/bin/uvicorn", line 8, in <module>
    sys.exit(main())
  ...
ModuleNotFoundError: No module named 'ultralytics'.

当前Dockerfile内容:

FROM python:3.8 as python

WORKDIR my-container

RUN python3 -m venv venv
ENV PYTHONPATH my-container/venv/bin
COPY requirements.txt requirements.txt
RUN . ./venv/bin/activate && pip install --upgrade pip && pip install -r requirements.txt


FROM my-detector:1.0.0

EXPOSE 80

requirements.txt已包含ultralytics==8.0.100等依赖。

问题原因

  • 多阶段构建逻辑错误:第二个阶段FROM my-detector:1.0.0完全未继承第一个阶段的依赖和虚拟环境,相当于使用了一个全新镜像,和第一阶段的构建内容无关联,自然找不到安装的ultralytics包。
  • PYTHONPATH设置错误:PYTHONPATH应指向Python的site-packages目录,而非虚拟环境的bin目录——bin目录仅存放可执行文件,不是模块路径。
  • 运行时未使用虚拟环境的Python解释器:即使虚拟环境配置正确,若直接调用系统的python/uvicorn,也无法加载虚拟环境内的依赖。

修复方案

修改Dockerfile,移除无效多阶段构建,确保依赖安装正确,且运行时使用虚拟环境的解释器:

FROM python:3.8

WORKDIR /my-container

# 创建并激活虚拟环境,安装依赖
RUN python3 -m venv venv
COPY requirements.txt requirements.txt
RUN . ./venv/bin/activate && pip install --upgrade pip && pip install -r requirements.txt

# 复制API代码到容器(请根据实际主文件路径修改)
COPY main.py .

# 设置PATH,让系统优先使用虚拟环境内的可执行文件
ENV PATH="/my-container/venv/bin:$PATH"

EXPOSE 80

# 使用虚拟环境的uvicorn启动API
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

关键修复点说明

  • 移除无效多阶段构建,直接基于python:3.8构建完整镜像。
  • 用PATH环境变量替代错误的PYTHONPATH设置,确保优先调用虚拟环境内的python、pip、uvicorn。
  • 明确指定使用虚拟环境的uvicorn启动API,保证加载虚拟环境中的依赖包。
  • 添加API代码复制步骤(需根据实际路径调整),避免因无运行逻辑导致容器立即停止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:05:10