Files

40 lines
1.6 KiB
Docker

# DINOv2 权重不复制进公开镜像,部署时由只读 volume 挂载到 /models。
FROM python:3.12-slim
WORKDIR /app
ARG DINOV2_SOURCE_COMMIT=7764ea0f912e53c92e82eb78a2a1631e92725fc8
# 只复制官方源码,不复制权重;源码提交固定以保证 checkpoint 架构不漂移。
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl tar \
&& mkdir -p /opt/dinov2 \
&& curl --fail --silent --show-error --location --retry 3 \
"https://github.com/facebookresearch/dinov2/archive/${DINOV2_SOURCE_COMMIT}.tar.gz" \
| tar -xzf - --strip-components=1 -C /opt/dinov2 \
&& printf '%s\n' "${DINOV2_SOURCE_COMMIT}" > /opt/dinov2/.mememeow-dinov2-source-commit \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cpu \
torch==2.8.0+cpu torchvision==0.23.0+cpu
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY backend ./backend
# backend.database 的 Repository 导入会复用 executor.agent_limits 的公共校验。
COPY executor ./executor
COPY visual_service.py ./visual_service.py
COPY runtime_telemetry.py ./runtime_telemetry.py
ENV PYTHONUNBUFFERED=1 \
MEMEMEOW_VISUAL_MODEL_REPO=/opt/dinov2 \
MEMEMEOW_VISUAL_WEIGHTS_PATH=/models/dinov2_vitb14_pretrain.pth \
MEMEMEOW_VISUAL_MODEL=dinov2_vitb14 \
MEMEMEOW_VISUAL_DIMENSIONS=768 \
MEMEMEOW_VISUAL_PREPROCESS_VERSION=dinov2_vitb14-rgb224-first-frame-v1 \
MEMEMEOW_VISUAL_CPU_THREADS=4 \
MEMEMEOW_VISUAL_CPU_INTEROP_THREADS=1
EXPOSE 8276
CMD ["uvicorn", "visual_service:app", "--host", "0.0.0.0", "--port", "8276"]