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.