Docker-based infrastructure for running forked EVM networks using Hardhat, Anvil, or Tenderly, with optional caching, block explorer, and reverse proxy.
docker pull ghcr.io/feshchenkod/hardhat:latestdocker run --rm -d \
-p 8545:8545 \
-e RPC_URL=$DEFAULT_RPC \
ghcr.io/feshchenkod/hardhat:latest
RPC_URLmust be an archive RPC endpoint.
Create cache volume (optional):
docker volume create hardhat-cacheRun node:
docker run --rm -d \
-p 8545:8545 \
-v hardhat-cache:/app/cache \
-e RPC_URL=$DEFAULT_RPC \
-e HEIGHT=24000000 \
-e INTERVAL=5000 \
--name hardhat \
ghcr.io/feshchenkod/hardhat:latestParameters
-
RPC_URL— archive RPC endpoint (required) -
HEIGHT— fork block numberMust be ≥
2675000 -
INTERVAL— mining interval in millisecondsDisabled if not set
-
hardhat-cachevolume — speeds up fork startup by caching RPC data
This option gives more flexibility and supports:
- Hardhat
- Anvil
- Proxy
- Automatic cleanup
- Traefik routing
- Block explorer
docker build --no-cache -t hardhat-node . -f Dockerfile.hardhatdocker pull ghcr.io/foundry-rs/foundry:nightly
docker build --no-cache -t anvil-node . -f Dockerfile.anvildocker build --no-cache -t proxy . -f Dockerfile.proxydocker volume create hardhat-cachegit clone https://github.com/feshchenkod/explorer.git
cd explorer
docker build -t etherparty .mv example_env .env
docker-compose up -dThis enables access via URLs like:
https://DOMAIN/<fork-name>/
./fork.sh -h-b Fork from block number
Default: latest - safety offset (5 blocks)
Minimum recommended: 2675000
-d Disable cache loading
-t Fork lifetime (default: 2h)
-n Container name (default: random UUID)
-i Mining interval in ms (default: disabled)
-h Show help
./fork.sh -t 2d -n my-forkFork will be removed after 2 days
Access URL: https://DOMAIN/my-fork/
./fork.sh -d -b 2675000 -t 30m -i 5000./anvil.sh -h-b Fork from block number
Default: latest - safety offset (5 blocks)
Minimum recommended: 2675000
-d Disable cache
-t Fork lifetime (default: 2h)
-n Container name (default: random UUID)
-i Mining interval in seconds (minimum: 5)
-h Show help
./anvil.sh -t 2d -n my-fork./anvil.sh -d -b 2675000 -t 30m -i 6./tenderly.sh -h-b Fork from block number
Default: latest - safety offset (5 blocks)
-c Chain name or chain ID
Default: mainnet / 1
-t Fork lifetime (default: 2h)
-n Container name (default: random UUID)
-h Show help
./tenderly.sh -t 2d -n my-fork -c bscFork will be removed after 2 days
Access URL: https://DOMAIN/my-fork/
- Disable cache (
-d) if RPC data consistency is critical - Use long-lived forks (
-t) for debugging or demos - Prefer Anvil for performance-sensitive workloads
- Hardhat is better for compatibility with existing HH tooling