Docker

Run Sieve with Docker Compose or build your own image.

Docker Compose

terminal
sieve init --docker
docker compose up -d

Creates sieve.toml, .env, abis/, and docker-compose.yml. Starts PostgreSQL and Sieve with GraphQL API on port 4000. Credentials come from .env. Edit sieve.toml for your contracts, or use the default USDC Transfer config.

Manual build

terminal
docker build -t sieve .

docker run \
  -v ./sieve.toml:/app/sieve.toml:ro \
  -v ./abis:/app/abis:ro \
  -p 4000:4000 -p 30303:30303 -p 30303:30303/udp \
  sieve --database-url postgres://... --api-port 4000

Config and ABIs are mounted as volumes, not baked into the image. One image works for dev, staging, and production.

Networking

Port 30303 (TCP + UDP) must be reachable from the internet for Ethereum P2P peer discovery. If you're behind NAT or a firewall, make sure this port is forwarded.

Use sieve peers to test connectivity before running the full indexer. It reports peer count and chain head every 5 seconds, useful for diagnosing Docker/NAT issues.

Multiple instances

You can run multiple Sieve instances on the same machine. Each instance needs its own P2P port, database, and config. Use --p2p-port or [p2p] port in TOML to avoid port conflicts. Speed is not affected. Sieve discovers peers outbound.