Docker Setup for Priva Node
This page covers Docker-specific setup details, including using Docker Compose with the official image.
Recommended: Docker Compose
The easiest way to run a Priva node is via Docker Compose.
Full docker-compose.yml
services:
node:
image: ghcr.io/privanet/node-client:latest
environment:
PRIVANET_PASSPHRASE: ${PRIVANET_PASSPHRASE}
ports:
- "8336:8336/udp"
- "8336:8336/tcp"
- "9090:9090"
volumes:
- ./data:/home/privanet/data
- ./config.yaml:/home/privanet/config.yaml:ro
restart: unless-stopped
stop_grace_period: 35s
deploy:
resources:
limits:
memory: 1g
stop_grace_period: 35sThe node needs up to 30 seconds to gracefully disconnect from peers before stopping. Without this, abrupt stops can cause peer timeout issues.
.env file
# /opt/privanet/.env
PRIVANET_PASSPHRASE=your-secure-passphrase
Start / Stop / Restart
# Start the node (detached)
docker compose up -d
# View logs
docker compose logs -f
# Stop gracefully
docker compose down
# Restart
docker compose restart node
# Update to latest image
docker compose pull && docker compose up -d
Running Without Compose
docker run -d \
--name privanet-node \
--restart unless-stopped \
-e PRIVANET_PASSPHRASE="your-secure-passphrase" \
-p 8336:8336/udp \
-p 8336:8336/tcp \
-p 9090:9090 \
-v /opt/privanet/data:/home/privanet/data \
-v /opt/privanet/config.yaml:/home/privanet/config.yaml:ro \
--memory=1g \
ghcr.io/privanet/node-client:latest
Initialization
Before the first start, initialize the node to create its cryptographic keypair:
docker run --rm \
-e PRIVANET_PASSPHRASE="your-secure-passphrase" \
-v /opt/privanet/data:/home/privanet/data \
ghcr.io/privanet/node-client:latest \
init --data-dir /home/privanet/data
This creates:
data/keystore.json— your node's encrypted private keydata/datastore/— LevelDB storage for peer state
danger
Never delete data/keystore.json. This file IS your node identity. Back it up to a safe location.
Data Persistence
| Path in container | Purpose | Mount |
|---|---|---|
/home/privanet/data | Node state, keystore, peer database | ./data:/home/privanet/data |
/home/privanet/config.yaml | Configuration | ./config.yaml:/home/privanet/config.yaml:ro |
Resource Limits
The memory: 1g limit is set to give libp2p enough headroom during peer discovery spikes. Running below 1 GB risks OOM kills on startup.
For Elite tier nodes handling high traffic, consider memory: 2g.