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.