Runs the three simplepool services (stratum proxy, dashboard, payout worker) against a Thunder daemon and a Bitcoin Core node that live outside this compose stack (typically on the same host).
- Docker Engine 24+ with the
composeplugin - A running Bitcoin Core (mainnet / forknet) reachable from this host
- A running Thunder daemon with JSON-RPC exposed on some host:port
- Ports 3334 (stratum) and 8081 (dashboard, override via env) free
cd deploy/docker
# 1. Configure the compose stack
cp .env.example .env
$EDITOR .env
# 2. Provide a proxy.conf. Start from the repo template and edit:
cp ../../proxy.conf.example proxy.conf
$EDITOR proxy.conf
# IMPORTANT: inside the container the DB path must be /data/shares.db
# set: db_path = /data/shares.db
# bitcoind_url can stay 127.0.0.1 because simplepool runs in host network mode.
# 3. Build images and bring the stack up
docker compose up -d --build
# 4. Watch the logs
docker compose logs -f simplepool
docker compose logs -f dashboard
docker compose logs -f payoutEverything reads/writes the same SQLite file via a shared bind mount:
| host path | container path | who writes |
|---|---|---|
../../data/ |
/data/ |
simplepool (RW), payout (RW), dashboard (RO) |
./proxy.conf |
/etc/simplepool/proxy.conf |
simplepool reads |
../../data is the repo's data/ folder — same as the bare-metal deploy.
- simplepool uses
network_mode: hostso miners hit:3334without NAT and sobitcoind_url = http://127.0.0.1:8332inproxy.confworks unchanged from bare-metal setups. - dashboard and payout use the default bridge; they reach Thunder via
host.docker.internal:6009(whichextra_hostsmaps to the host gateway on Linux, native on macOS/Windows). If Thunder lives on a different box, setTHUNDER_RPC_URLto a real hostname/IP.
git pull
docker compose up -d --buildCompose rebuilds only images whose sources changed (via layer cache) and restarts only the affected containers. Stratum drops connections on restart — miners auto-reconnect within seconds.
# Stop the stack
docker compose down
# Tail one service's log
docker compose logs -f payout
# Get a shell in the running dashboard container
docker compose exec dashboard sh
# Rebuild just one image after editing its Dockerfile
docker compose build simplepool
docker compose up -d simplepool
# Payout worker: do a dry-run cycle (no broadcast)
PAYOUT_DRY_RUN=1 docker compose up payout- bitcoind / drivechain-forknet — the mainchain node
- Thunder daemon — the sidechain node
- bip300301_enforcer — the BMM enforcer
- electrs / esplora — mainchain indexer used by the enforcer
Those form the drivechain infrastructure below simplepool. Install them on
the host (see the project's INSTALL.md) and point
bitcoind_url in proxy.conf + THUNDER_RPC_URL in .env at them.