Skip to content

Ubuntu 26.04 container validation (2026-10-08_2118)

Result: PASS. Fresh ubuntu:26.04 container on Docker Desktop simulating the 2 vCPU / 8 GB target (2 CPUs for the server and for docling), run as a non-root sudo user against the host's Docker daemon.

Steps

  • Prepare: sudo user 'ops', copy of the repository (no local venv, data or tool settings)
  • 1. setup_ubuntu.sh
  • 1b. Target machine: cap the docling container at 2 CPUs (2 vCPU / 8 GB simulation)
  • 2. Setup results
  • 3. Setup is safe to run again (one cron entry)
  • 4. Smoke test: inputs/ → outputs/ + completed/, corrupt PDF → errors/
  • 5. cleanup.sh
  • 6. First demo run (scripts/demo_run.sh)
  • 7. Acceptance checks
  • ALL STEPS PASSED

Demo benchmark

Machine
OS Ubuntu 26.04.1 LTS
CPU aarch64 CPU (2 CPUs, 7.7 GB RAM)
Docker 4 CPUs, 7.7 GB available; container limit 6.055GiB
PDF Pages Chunks Scanned OCR forced Seconds Sec/page Markdown chars Result
docling_paper.pdf 9 2 11% False 54.5 6.06 35,896 OK
Run
Wall time 57 s
Throughput 568 pages/hour (6.33 s/page)
Time per 1,000 pages at this rate 1.8 h
Peak container memory 2.16 GiB of 6.055GiB
Container restarts during run 0
extract.py exit code 0 (all converted)

Note: the first conversion after the container starts includes ~20–45 s of pipeline start-up, so a one-document demo understates steady-state throughput. A small demo is a smoke test; size a batch with tests/run_acceptance.sh --bench-only.

Acceptance run 2026-10-08_1552

Host: Linux aarch64 · Docker VM: 4 CPUs, 8215646208 bytes · container limit: 6.055GiB

Checks

ID Result Check
A1 PASS single file, about 450 lines or fewer, third-party imports are only requests + pypdf
A6 PASS only read-only docker commands (stats, inspect) in extract.py
A25 PASS docling-serve published on loopback only (127.0.0.1:5001), never on the network
A2 PASS full run: one JSON per good PDF in outputs/ (5 expected)
A9 PASS corrupt bad.pdf → DOC_FAILED, others succeed, exit code 1
A11 PASS inputs/ empty, good PDFs in completed/
A12 PASS bad.pdf moved to errors/
A13 PASS every PDF in completed/ has outputs/.json
A7 PASS every JSON is valid, matches the schema (incl. extractor and engine versions), pages = real page count
A14 PASS one log per PDF, each containing only its own document's lines
A15 PASS PROGRESS lines logged while converting
A22 PASS no container restart during the full run (restarts 0 → 0)
A23 PASS OCR forced only on the scanned PDF(s)
A8 PASS rerun with empty inputs/: nothing processed, exit code 0
A19 PASS --mem-high 0.3: THROTTLE logged and the run still completes
A20 PASS memory monitor unavailable: warning logged, run completes
A21 PASS container restarted mid-run: chunks resent, all PDFs completed
A10 PASS server down: exit code 2, PDF stays in inputs/

Full run: ok=5 failed=1 pages=103 secs=460.3 sec_per_page=4.47 restarts=0 · peak container memory 2.8 GiB

18 passed, 0 failed.