Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Docker

Tesseras provides a Docker image for running the daemon in containers. This is useful for servers, testing multi-node networks, and CI environments.

Building the image

From the repository root:

docker build -t tesseras-daemon .

The multi-stage Dockerfile uses rust:1.85 to compile and debian:bookworm-slim as the runtime base. The resulting image is small and contains only the daemon binary and CA certificates.

Running a single node

docker run -d \
  --name tesseras \
  -p 4433:4433/udp \
  tesseras-daemon

This starts a node that:

  • Listens on UDP port 4433
  • Bootstraps from the default seed nodes
  • Stores data inside the container (ephemeral)

To persist data across container restarts, mount a volume:

docker run -d \
  --name tesseras \
  -p 4433:4433/udp \
  -v tesseras-data:/root/.local/share/tesseras \
  tesseras-daemon

Running as a seed node

To run a seed node that doesn’t bootstrap from anyone else:

docker run -d \
  --name tesseras-seed \
  -p 4433:4433/udp \
  tesseras-daemon --listen 0.0.0.0:4433 --bootstrap ""

Multi-node network with Docker Compose

The repository includes a Docker Compose file for testing a 3-node network:

services:
  boot1:
    build: ../..
    command: ["--listen", "0.0.0.0:4433", "--bootstrap", ""]
    ports: ["4433:4433/udp"]

  boot2:
    build: ../..
    command: ["--listen", "0.0.0.0:4433", "--bootstrap", "boot1:4433"]
    depends_on: [boot1]

  client:
    build: ../..
    command: ["--listen", "0.0.0.0:4433", "--bootstrap", "boot2:4433"]
    depends_on: [boot2]

Start the network:

cd tests/smoke
docker compose up --build -d

Check that all nodes are running:

docker compose logs --tail=5

You should see daemon ready in the logs for each node, and bootstrap successful for boot2 and client.

Stop the network:

docker compose down

Custom configuration

To use a config file with Docker, mount it into the container:

docker run -d \
  --name tesseras \
  -p 4433:4433/udp \
  -v ./config.toml:/etc/tesseras/config.toml:ro \
  -v tesseras-data:/root/.local/share/tesseras \
  tesseras-daemon --config /etc/tesseras/config.toml

See the Configuration chapter for all available options.