Docker

Waratah publishes a container image with everything in one place: the query engine, the storage engines, and the web console. One container is one complete server — the default configuration runs the single-process server, so there is nothing to orchestrate for a first deployment.

The image lives on Docker Hub as docker.io/ashleysommer/waratah:

docker pull docker.io/ashleysommer/waratah:latest

Run it

docker run -d --name waratah \
  -p 8080:8080 \
  -v waratah-data:/var/lib/waratah \
  docker.io/ashleysommer/waratah:latest
Part Meaning

-p 8080:8080

Publish the HTTP port. The console is at http://localhost:8080/, the SPARQL endpoint at http://localhost:8080/rdf4j/repositories/main, and the health check at http://localhost:8080/waratah/health.

-v waratah-data:/var/lib/waratah

Persist the data root — the store, spill files, ingest staging, and notebook directories all live under it. A named volume (as here) survives docker rm; without a mount, everything stays inside the container’s writable layer.

docker.io/ashleysommer/waratah:latest

The image. The command baked into it is standalone --http 0.0.0.0:8080 --data-dir /var/lib/waratah.

Because the server runs in the foreground inside the container, its logs go to Docker:

docker logs -f waratah

Stop and restart without losing data:

docker stop waratah
docker start waratah

Passing extra arguments

Anything you place after the image name becomes arguments to the waratah binary — and replaces the default command, so repeat the standalone line and add your flags to it:

docker run -d --name waratah \
  -p 8080:8080 \
  -v waratah-data:/var/lib/waratah \
  docker.io/ashleysommer/waratah:latest \
  standalone --http 0.0.0.0:8080 --data-dir /var/lib/waratah \
  --load-demo

The flags are the same ones the CLI documents. Common variations:

Run line addition Effect

--load-demo

Load the weather/city demo dataset before serving — handy for a first look.

--debug

Log SPARQL query text, timings, and client errors; in a container these go to docker logs.

--describe-mode cbd

Switch the DESCRIBE algorithm (star default; also scbd).

--strict-sparql

Strict SPARQL 1.1 behavior (see Deviations from Spec).

--with-notebooks

Enable the Jupyter service at /jupyter. The first start with this flag installs the pinned Python stack (Jupyter, rdflib, pandas, matplotlib) into the data volume — a few minutes, and it needs network access to PyPI once; every later start reuses it. The stack installs from pre-built binary wheels, so no compilers are involved.

A different host port needs no flag at all — map it:

docker run -d -p 9090:8080 -v waratah-data:/var/lib/waratah \
  docker.io/ashleysommer/waratah:latest

Loading data

The server is already running against the mounted volume, so the container-native path is the console’s Ingest page or the HTTP ingest API (see the Ingest API reference) — both stage files under the data root and load them into the running server.

Beyond one container

The image also exposes 7005, the compute node’s internal gRPC port. Multi-copy deployments (a cluster of waratah instances, or one container per process) run several copies of the same image with command overrides and a shared cluster.toml — see the developer Docker page for the image’s process model and internals.