Spaces:
Running
Running
| # scikit-plots/ai 路 Dockerfile 路 v3.3.0 | |
| # Reproducible Linux/amd64 security profile for Hugging Face Docker Spaces. | |
| # SPDX-License-Identifier: BSD-3-Clause | |
| # Immutable multi-platform index for the current official | |
| # python:3.11.16-slim-bookworm image reviewed on 2026-08-30. CI must verify | |
| # both this digest and the selected linux/amd64 manifest before release. | |
| ARG PYTHON_IMAGE=python:3.11.16-slim-bookworm@sha256:0bee7276f83efd4a1ee05bbbf4281d95ed28e079220a9457f25a93e3f1e3c31b | |
| FROM --platform=linux/amd64 ${PYTHON_IMAGE} AS builder | |
| ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \ | |
| PIP_NO_CACHE_DIR=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| PYTHONUNBUFFERED=1 | |
| # Build an isolated runtime venv. Only prebuilt wheels whose bytes are named | |
| # by requirements.lock are accepted; no dependency resolver drift or source | |
| # build is permitted in the release image path. | |
| RUN python -m venv /opt/venv | |
| COPY requirements.lock /tmp/requirements.lock | |
| RUN /opt/venv/bin/python -m pip install \ | |
| --no-cache-dir \ | |
| --require-hashes \ | |
| --only-binary=:all: \ | |
| -r /tmp/requirements.lock \ | |
| && rm -f /tmp/requirements.lock | |
| FROM --platform=linux/amd64 ${PYTHON_IMAGE} AS runtime | |
| # HF Docker Spaces recommends UID 1000. The app never needs root at runtime. | |
| RUN useradd --create-home --uid 1000 --shell /usr/sbin/nologin user \ | |
| && rm -rf \ | |
| /usr/local/lib/python3.11/site-packages/pip* \ | |
| /usr/local/lib/python3.11/site-packages/setuptools* \ | |
| /usr/local/lib/python3.11/site-packages/wheel* \ | |
| /usr/local/bin/pip* \ | |
| /usr/local/bin/wheel* | |
| COPY --from=builder /opt/venv /opt/venv | |
| ENV PATH=/opt/venv/bin:$PATH \ | |
| HOME=/home/user \ | |
| XDG_CACHE_HOME=/tmp/.cache \ | |
| HF_HOME=/tmp/huggingface \ | |
| TMPDIR=/tmp \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| PYTHONUNBUFFERED=1 \ | |
| PIP_DISABLE_PIP_VERSION_CHECK=1 \ | |
| DEPLOYMENT_PROFILE=strict | |
| WORKDIR /home/user/app | |
| COPY --chown=1000:1000 _utils ./_utils | |
| COPY --chown=1000:1000 app.py deduplicate_dataset.py ./ | |
| USER 1000:1000 | |
| EXPOSE 7860 | |
| # Stdlib-only health probe; no curl/wget package is added to the runtime image. | |
| HEALTHCHECK --interval=15s --timeout=5s --start-period=10s --retries=3 \ | |
| CMD python -I -c \ | |
| "import urllib.request; urllib.request.urlopen('http://127.0.0.1:7860/health', timeout=4).read(1)" \ | |
| || exit 1 | |
| CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860", "--no-access-log"] | |