File size: 1,730 Bytes
6a46e44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# syntax=docker/dockerfile:1
#
# Docling PDF Processor β€” container image.
#
# Builds the Gradio demo app. Secrets (OPENROUTER_API_KEY, GROQ_API_KEY) are
# NOT baked in β€” pass them at runtime via env_file (.env) or -e flags.
#
#   docker build -t docling-pdf-processor .
#   docker run -p 8010:8010 --env-file .env docling-pdf-processor
#
# or use docker compose (see docker-compose.yml).

FROM python:3.11-slim AS base

# System libraries needed by Pillow / image handling on slim images.
RUN apt-get update && apt-get install -y --no-install-recommends \
        libgl1 \
        libglib2.0-0 \
    && rm -rf /var/lib/apt/lists/*

# uv (pinned to match the lockfile produced with uv 0.7.2).
COPY --from=ghcr.io/astral-sh/uv:0.7.2 /uv /usr/local/bin/uv

WORKDIR /app

ENV UV_COMPILE_BYTECODE=1 \
    UV_LINK_MODE=copy \
    UV_PYTHON_DOWNLOADS=never \
    HF_HOME=/app/.cache/huggingface \
    GRADIO_SERVER_NAME=0.0.0.0 \
    GRADIO_SERVER_PORT=8010

# ── Dependency layer (cached unless pyproject/lock change) ────────────────
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-install-project

# ── Application source ────────────────────────────────────────────────────
COPY docling_pdf_processor ./docling_pdf_processor
COPY main.py README.md ./
RUN uv sync --frozen --no-dev

EXPOSE 8010

# Healthcheck: Gradio serves HEAD / with 200 once ready.
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
    CMD python -c "import urllib.request as u; u.urlopen('http://127.0.0.1:8010/', timeout=5)" || exit 1

CMD [".venv/bin/python", "main.py"]