# syntax=docker/dockerfile:1.7 FROM python:3.14-slim ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ HF_HOME=/models/.huggingface \ TRANSFORMERS_CACHE=/models/.huggingface \ ML_MODEL_DIR=/models RUN apt-get update && apt-get install -y --no-install-recommends \ ffmpeg \ libpq5 \ libjpeg62-turbo \ libwebp7 \ libpng16-16 \ libgl1 \ libglib2.0-0 \ ca-certificates \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements-ml.txt requirements.txt ./ # CPU-only torch: the default PyPI wheel bundles the CUDA runtime (~5.6GB # layer); this pipeline never uses a GPU. --index-url (not --extra-index-url) # guarantees only +cpu wheels are considered, so no nvidia-*-cu12 deps. RUN pip install --index-url https://download.pytorch.org/whl/cpu \ "torch>=2.12,<3.0" "torchvision>=0.27,<0.28" RUN pip install -r requirements-ml.txt COPY backend/ ./backend/ COPY alembic/ ./alembic/ COPY alembic.ini ./ COPY entrypoint.sh ./ RUN chmod +x entrypoint.sh # Models self-heal into /models on first start (FC-2 implements this) VOLUME ["/models"] ENTRYPOINT ["./entrypoint.sh"] CMD ["ml-worker"]