Run Docling with Docker (docling-serve)
Run the official docling-serve HTTP API as a container — no Python env needed. Pick the right image (CPU vs CUDA), publish port 5001, enable the UI, and test with curl. Advanced deployment lives in the official docling-serve project.
:latest — pin explicit versions like -cu130:v1.18.0.When Docker is (and isn’t) the answer
- Use Docker when an app, pipeline or team needs Docling over HTTP (
/v1/convert/source), reproducible deploys, or isolation from host Python. - Skip Docker for one-off local conversion —
pip install doclingplusdocling convert file.pdf --to mdis faster (see the install overview). - Images are large (4–11 GB): base/CPU ~4.4 GB, CUDA 12.8 ~11.4 GB. Pull once, reuse everywhere.
Which image to pull: CPU vs CUDA
All images are published on both quay.io/docling-project/… and ghcr.io/docling-project/… for linux/amd64 (and arm64 for base/CPU). Replace docker with podman if that is your runtime.
| Image | Use when | Arch / size |
|---|---|---|
docling-serve / docling-serve-cpu | CPU-only servers, laptops, CI | amd64 + arm64, ~4.4 GB |
docling-serve-cu128 | NVIDIA GPUs on CUDA 12.8 | amd64, ~11.4 GB |
docling-serve-cu130 | NVIDIA GPUs on CUDA 13.0 | amd64 (+arm64), size TBD |
latest and main; CUDA images intentionally have no latest (CUDA versions deprecate with PyTorch). Always pin CUDA images explicitly, e.g. quay.io/docling-project/docling-serve-cu130:v1.18.0. A ROCm image exists but is not published (build locally); slim images without pre-downloaded weights are planned.docker pull quay.io/docling-project/docling-serve-cpudocker pull quay.io/docling-project/docling-serve-cu130:v1.18.0Start the server (Docker / Podman)
CPU (most common)
podman run -p 5001:5001 -e DOCLING_SERVE_ENABLE_UI=1 quay.io/docling-project/docling-serveCUDA GPU (needs nvidia-container-toolkit / --gpus)
docker run --gpus all -p 5001:5001 -e DOCLING_SERVE_ENABLE_UI=1 quay.io/docling-project/docling-serve-cu130:v1.18.0First start downloads model weights inside the image’s cache — give it time and disk. For compose-based deploys see docs/deployment.md.
Alternative: pip-install docling-serve
Same server without containers — useful on a VM or for debugging:
pip install "docling-serve[ui]"docling-serve run --enable-uiPorts, docs, UI and health check
- API base:
http://127.0.0.1:5001 - Interactive API docs (Swagger):
http://127.0.0.1:5001/docs - Playground UI:
http://127.0.0.1:5001/ui(only whenDOCLING_SERVE_ENABLE_UI=1/--enable-ui) - Stable conversion endpoint:
POST /v1/convert/source(v1 API — see the v1 migration notes if you have old code).
/ui 404 — you forgot DOCLING_SERVE_ENABLE_UI=1 / --enable-ui.If /docs renders, the server is healthy. If the port is busy, remap with -p 5002:5001 and use :5002 in the URLs.
Convert your first document via API
curl -X POST http://localhost:5001/v1/convert/source -H 'Content-Type: application/json' -d '{"sources": [{"kind": "http", "url": "https://arxiv.org/pdf/2501.17887"}]}'curl -X 'POST' \
'http://localhost:5001/v1/convert/source' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"sources": [{"kind": "http", "url": "https://arxiv.org/pdf/2501.17887"}]
}'
The response contains Markdown / JSON / HTML depending on your request options. Explore every runtime option in docs/usage.md and the REST reference in docling-serve docs.
Configuration + deployment notes
- Configure via env vars (see
.env.exampleand docs/configuration.md), e.g.DOCLING_SERVE_ENABLE_UI=1. - Mount a cache volume so model weights survive restarts; set memory limits for large PDFs (see out-of-memory).
- Put auth / TLS / rate-limits in a reverse proxy for production; the compose examples in
docs/deployment.mdare the starting point. - Pin image tags in production (
:v1.18.0, not:latest) — especially CUDA tags.
Common container problems
- Server does not start — see docling-serve does not start: port conflict, missing
[ui]extra, or wrong entrypoint. /ui404 — you forgotDOCLING_SERVE_ENABLE_UI=1/--enable-ui.- GPU image runs on CPU — host needs NVIDIA drivers + container toolkit and
--gpus all; confirm inside withnvidia-smi. - Pulls
:latestof a CUDA image fail — expected: CUDA images only carry explicit version tags. - First request slow — weights downloading; subsequent requests reuse the cache.
Docker FAQ
Docker or pip install?
pip install docling) for local CLI conversion. Docker (docling-serve) when you need a language-agnostic HTTP API for an app or team.Which registry — quay.io or ghcr.io?
Why is there no :latest CUDA tag?
:latest could silently change your CUDA. Pin explicit versions like -cu130:v1.18.0.Where are the API docs?
Advanced deployment is documented in the official docling-serve project.
Verified with Docling v2.129.0 · Last checked 2026-09-22 · Official source