# OCR 服务镜像(services/ocr,vision-plan §4.2):RapidOCR + PP-OCRv6 small,CPU 推理。 # docker build -f deploy/docker/ocr.Dockerfile -t bid-doctor-ocr . # 模型在构建时下载并打进镜像:私有化离线安装、运行时不开网络出口(架构 §3.5、§7)。 FROM python:3.13-slim AS build COPY --from=ghcr.io/astral-sh/uv:0.12.20 /uv /usr/local/bin/uv ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_PROJECT_ENVIRONMENT=/app/.venv WORKDIR /src COPY pyproject.toml uv.lock .python-version ./ COPY server/pyproject.toml server/ COPY services/ocr/pyproject.toml services/ocr/ RUN uv sync --frozen --no-dev --no-install-workspace --package bid-doctor-ocr COPY services/ocr services/ocr RUN uv sync --frozen --no-dev --package bid-doctor-ocr --no-editable RUN /app/.venv/bin/python -c "from rapidocr import RapidOCR; RapidOCR()" FROM python:3.13-slim # opencv(RapidOCR 依赖)要的系统库 RUN apt-get update && apt-get install -y --no-install-recommends libgl1 libglib2.0-0 && rm -rf /var/lib/apt/lists/* \ && useradd --system --uid 10001 bd COPY --from=build /app/.venv /app/.venv ENV PATH=/app/.venv/bin:$PATH PYTHONUNBUFFERED=1 OMP_NUM_THREADS=4 USER bd EXPOSE 8000 HEALTHCHECK --interval=10s --timeout=3s --retries=6 CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/healthz')" CMD ["bid-doctor-ocr", "--host", "0.0.0.0", "--port", "8000"]