# 选择一个包含 Python 的基础镜像,考虑一个带编译工具的以防某些库需要编译 FROM nvidia/cuda:12.6.0-devel-ubuntu22.04 # 设置时区(可选,但对于日志时间戳有好处) ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 设置工作目录 WORKDIR /app # 安装系统依赖(例如 OpenCV 可能需要) # libgl1-mesa-glx 是常见的桌面OpenGL库,对于 headless server 来说,libgl1可能就够了 # 有些版本的OpenCV需要特定的共享库 RUN apt-get update && apt-get install -y --no-install-recommends \ libgl1 \ libglib2.0-0 libsm6 libxext6 libxrender-dev \ && apt-get clean && rm -rf /var/lib/apt/lists/* # 安装 Python 和 pip RUN apt-get update && apt-get install -y python3 python3-pip ENV OMP_NUM_THREADS=1 # 复制依赖文件并安装 COPY requirements.txt . RUN pip install torch==2.6.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126 RUN pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt # 复制整个应用代码和模型到容器中 COPY . . # 确保模型目录存在且模型已复制 (Dockerfile中的COPY指令会处理此问题) # 运行前检查模型路径是否正确: # RUN ls -lR app/models/ # 这可以帮助你在构建时调试路径问题 # 暴露API服务运行的端口 EXPOSE 8000 # 容器启动时运行的命令 # 使用 --host 0.0.0.0 使服务可以从容器外部访问 # --reload 用于开发,生产中通常不使用 CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]