Running an Ethereum (ETH) Node Using Reth and Lighthouse on Docker
Running your own Ethereum node helps you verify transactions, improve decentralization, and gain deeper control over blockchain data.
In this article, we’ll walk you through setting up an Ethereum execution client (Reth) and a consensus client (Lighthouse) using Docker Compose, including how to check logs, verify synchronization, and accelerate sync using snapshots.
Create the Ethereum Node Directory
Navigate to the directory where you want to store Ethereum node data:
cd /srv
Create the required folder structure:
mkdir -p ./ethereum-node/{execution,beacon/data,validator,jwt}
cd ethereum-node
Generate JWT Secret
Generate a JWT secret for secure communication between execution and consensus clients:
openssl rand -hex 32 > ./jwt/jwt.hex
Insert Docker Compose Configuration
Create the Compose file inside your node directory:
cd /srv/ethereum-node
nano docker-compose.yml
Paste the configuration below (see at the end of the article), then save the file.
Launch the Node
Start all containers with Docker Compose:
docker compose up -d
Check Reth Logs
Verify that the execution client (Reth) is running correctly:
docker logs reth -f
If everything works fine, you’ll see logs similar to:
INFO Starting reth version="1.3.12"
INFO RPC HTTP server started url=0.0.0.0:8545
INFO RPC WS server started url=0.0.0.0:8546
INFO Status connected_peers=8 latest_block=9420000
Verify Ethereum Node Sync Status
Check if the execution client is syncing:
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
--data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}'
If the node is not synced, the result will be:
{"jsonrpc":"2.0","id":1,"result":false}
Verify Beacon Node Sync Status
Check synchronization status of the Lighthouse beacon node:
curl -s http://localhost:5052/eth/v1/node/syncing | jq
If still syncing, sync_distance
will be greater than 0:
{
"data": {
"is_syncing": true,
"is_optimistic": true,
"el_offline": false,
"head_slot": "8748607",
"sync_distance": "2368"
}
}
Speed Up Sync with Snapshots
Download a Reth snapshot to accelerate synchronization.
Get snapshots from:
🔗 https://publicnode.com/snapshots
🔗 https://snapshots.ethpandaops.io
Install zstd and extract the snapshot into the execution folder:
sudo apt-get install zstd
tar --use-compress-program=unzstd -xvf snapshot.tar.zst -C /srv/ethereum-node/execution
Example Docker Compose Configuration
Example Pruning Configuration (reth.toml
)
[prune]
block_interval = 5
[prune.segments]
sender_recovery = "full"
transaction_lookup = "full"
receipts = { before = 8000000 }
account_history = { distance = 10_064 }
storage_history = { distance = 10_064 }
Conclusion
With this configuration, you now have a fully functioning Ethereum Sepolia node using Reth (execution client) and Lighthouse (consensus client) in Docker.
This setup provides:
- Easy deployment and containerized management.
- Secure JWT-based communication between clients.
- Faster sync with snapshot restoration.
🔹 Next step: connect a validator client to start staking on the Sepolia testnet.