Eth Docker Documentation
website·Indexed 33 days ago
https://ethdocker.comA guide for deploying and managing Ethereum staking nodes using Docker. It provides instructions on hardware requirements, node types, client selection (including Reth, Nethermind, and Lighthouse), key management, and advanced configurations such as SSV nodes, Grafana dashboards, and RPC proxies.
What's inside Eth Docker
- Vero protects validators from correlated, consensus-impacting bugs across multiple clients (e.g., a bug affecting Geth, Nethermind, and Besu simultaneously). It achieves this by running the Vero validator client alongside multiple CL/EL client pairs and requiring an N-of-M consensus between them before finalizing or signing on the Ethereum mainnet. For example, a 2-of-3 setup requires at least two of the three client pairs to agree.
Eth Docker platform and feature support
Eth Docker provides a simplified way to run Ethereum staking full nodes with the following capabilities:
- Client Support: Supports all FOSS (Free and Open Source Software) Ethereum clients in any combination; uses official client team images.
- OS/Architecture: Runs on Linux or macOS; supports Intel/AMD x64, ARM, or RISC-V CPUs.
- Network Support: Supports Ethereum and Gnosis Chain (staking or RPC), ssv.network DVT nodes, and RocketPool integration in (reverse) hybrid mode.
- Monitoring: Supports Grafana dashboards and alerting (local, Grafana Cloud, or remote Mimir/Thanos clusters).
- Advanced Networking: Supports exposing interfaces over HTTPS via traefik secure web proxy and local source-building of clients.
Fix SSH 'wrong permissions' errors on Windows 10
If the OpenSSH client on Windows complains about permissions for the
.sshdirectory orconfigfile, manually restrict access in File Explorer:- Navigate to
C:\Users\USERNAME\.ssh. - Right-click -> Properties -> Security -> Advanced.
- Set your user as the owner with Full Access.
- Remove access rights for all other users (e.g., SYSTEM, Administrators).
- Check "Replace all child object permissions" and click OK.
- Navigate to
Learn the basics of Ethereum staking and node operation
For developers and operators starting with Ethereum staking, use the following official resources:
- Official Staking Launchpad: https://launchpad.ethereum.org/en/
- General ETH Staking Overview: https://ethereum.org/en/staking/
- Guide on running a node (a prerequisite for running a validator): https://ethereum.org/en/run-a-node/
Understand Ethereum validator reward types
Ethereum validators earn rewards through three primary mechanisms:
- New Issuance: ETH issued to the validator balance for performing duties (Attestations, block production, and sync committees). If a validator is offline, it is penalized at a rate slightly lower than the reward rate.
- Priority Fees: Fees paid by users for transactions, which are immediately liquid and sent to the configured fee recipient address.
- MEV (Maximal Extractable Value): Additional value extracted by accepting blocks built by searchers via tools like
mev-boost. These rewards are also sent to the fee recipient address.
Switch Execution Layer from Full to Expired node
To switch the execution layer client to history expiry, use the
prune-historycommand. In some cases, this can be done without a full resync.Caveats:
- Besu requires 200 GiB of free space for this operation.
- For Besu, resyncing with
./ethd resync-executionwhileEL_NODE_TYPE=pre-merge-expiryis more space-efficient than pruning.
./ethd prune-historyPrune Geth disk space using ethd
Theethdtool provides a command to simplify the pruning of Geth to reclaim disk space. Additionally, anauto-prune.shscript is available to be run via crontab, which automatically prunes Geth when free disk space falls below 100 GiB or 10%. Theauto-prune.shscript requires thebcpackage to be installed on the system.# Manual prune sudo ./ethd prune-geth # Auto-prune script (add to crontab) ./auto-prune.shSafely remove validator keys to prevent slashing during migration
To avoid slashing, you must ensure validator keys are completely removed and the service is disabled before importing them into a new client. A 15-minute wait period is recommended after removing keys before re-importing them into the
~/eth-dockerdirectory.Critical Safety Step: After removing keys, start the service and check logs (
journalctl -fu) to verify the validator cannot find the keys. Do not proceed if keys are still accessible.# Example for Somer Esat's guide sudo systemctl stop prysmvalidator sudo rm -rf /var/lib/prysm/validator # Verify failure: sudo systemctl start prysmvalidator journalctl -fu prysmvalidator # Disable permanently: sudo systemctl stop prysmvalidator sudo systemctl disable prysmvalidatorCompare Ethereum Execution Client resource requirements
Execution client resource usage is measured after initial sync while keeping up with the head. All clients continuously prune state and can expire history. DB size varies by node type: Full, Post-Merge history only, or Rolling expiry (33,024 epochs). (Data as of September 2026):Client Version DB Full DB Post-Merge DB Rolling RAM Notes Besu v26.8.1 >1.7 TiB ~1.1 TiB ~430 GiB ~10 GiB Erigon 3.6.0 >1.7 TiB ~1.1 TiB ~590 GiB ~18 GiB Uses available system RAM Ethrex 26.0.0 >1.7 TiB ~1.6 TiB n/a ~17 GiB ~30 GiB RAM during snap sync Geth 1.17.5 >1.7 TiB ~1.3 TiB n/a ~8 GiB Nethermind 2.0.0 ~1.6 TiB ~1.2 TiB ~450 GiB ~10 GiB Flat FlatDB (default) Nethermind 2.0.0 ~1.5 TiB ~1.2 TiB ~390 GiB ~6 GiB FlatInTrie FlatDB Nimbus 0.4.0 >1.7 TiB tbd tbd tbd Reth 2.5.2 ~2 TiB ~1.2 TiB ~400 GiB ~14 GiB with receipts Allow P2P traffic for IPv6
Docker mapped ports may be filtered on IPv6 by default. If P2P ports (e.g., 30303) are filtered, add explicit UFW rules to open them.sudo ufw allow from any to any port 30303 sudo ufw allow proto udp from any to any port 9000 sudo ufw allow proto udp from any to any port 9001Configure Grafana alerting and notifications
Grafana allows sending alerts to email, Slack, Discord, PagerDuty, and other services. Some alerts are pre-provisioned and use a
severitylabel. To configure these:- Use the alert bell icon on the left sidebar.
- Set up contact points and notification policies.
- Route alerts based on severity (e.g.,
mediumto Discord/Telegram,criticalto PagerDuty/OpsGenie).
Perform a voluntary validator exit using the keymanager API
A voluntary validator exit removes a validator from attesting duties and triggers an automatic withdrawal of staked ETH to the configured withdrawal address. Note: Do not use an exchange wallet as a withdrawal address. To avoid offline penalties, continue running the validator until the exit is processed by the chain. A fully synced consensus client is required (Checkpoint sync viaRAPID_SYNC_URLin.envis recommended for speed).# 1. List your keys to find the public key ./ethd keys list # 2. Sign the exit message ./ethd keys sign-exit <0xpubkey> # 3. Submit the exit # Option A: Use the ethd tool to send via your own consensus client ./ethd keys send-exit # Option B: Manually upload the resulting JSON file to beaconcha.in/tools/broadcast