Eth Docker Documentation

website·Indexed 33 days ago

https://ethdocker.com

A 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.

Tokens
29.9K
Snippets
179
Records
251
Agent score
68%

What's inside Eth Docker

  1. Overview of Vero Architecture for Black Swan Protection

    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.
  2. 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.
  3. Fix SSH 'wrong permissions' errors on Windows 10

    If the OpenSSH client on Windows complains about permissions for the .ssh directory or config file, manually restrict access in File Explorer:

    1. Navigate to C:\Users\USERNAME\.ssh.
    2. Right-click -> Properties -> Security -> Advanced.
    3. Set your user as the owner with Full Access.
    4. Remove access rights for all other users (e.g., SYSTEM, Administrators).
    5. Check "Replace all child object permissions" and click OK.
  4. Understand Ethereum validator reward types

    Ethereum validators earn rewards through three primary mechanisms:

    1. 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.
    2. Priority Fees: Fees paid by users for transactions, which are immediately liquid and sent to the configured fee recipient address.
    3. 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.
  5. Switch Execution Layer from Full to Expired node

    To switch the execution layer client to history expiry, use the prune-history command. 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-execution while EL_NODE_TYPE=pre-merge-expiry is more space-efficient than pruning.
    ./ethd prune-history
  6. Prune Geth disk space using ethd

    The ethd tool provides a command to simplify the pruning of Geth to reclaim disk space. Additionally, an auto-prune.sh script is available to be run via crontab, which automatically prunes Geth when free disk space falls below 100 GiB or 10%. The auto-prune.sh script requires the bc package to be installed on the system.
    # Manual prune
    sudo ./ethd prune-geth
    
    # Auto-prune script (add to crontab)
    ./auto-prune.sh
  7. Safely 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-docker directory.

    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 prysmvalidator
  8. Compare 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):
    ClientVersionDB FullDB Post-MergeDB RollingRAMNotes
    Besuv26.8.1>1.7 TiB~1.1 TiB~430 GiB~10 GiB
    Erigon3.6.0>1.7 TiB~1.1 TiB~590 GiB~18 GiBUses available system RAM
    Ethrex26.0.0>1.7 TiB~1.6 TiBn/a~17 GiB~30 GiB RAM during snap sync
    Geth1.17.5>1.7 TiB~1.3 TiBn/a~8 GiB
    Nethermind2.0.0~1.6 TiB~1.2 TiB~450 GiB~10 GiBFlat FlatDB (default)
    Nethermind2.0.0~1.5 TiB~1.2 TiB~390 GiB~6 GiBFlatInTrie FlatDB
    Nimbus0.4.0>1.7 TiBtbdtbdtbd
    Reth2.5.2~2 TiB~1.2 TiB~400 GiB~14 GiBwith receipts
  9. 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 9001
  10. Configure Grafana alerting and notifications

    Grafana allows sending alerts to email, Slack, Discord, PagerDuty, and other services. Some alerts are pre-provisioned and use a severity label. To configure these:

    1. Use the alert bell icon on the left sidebar.
    2. Set up contact points and notification policies.
    3. Route alerts based on severity (e.g., medium to Discord/Telegram, critical to PagerDuty/OpsGenie).
  11. 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 via RAPID_SYNC_URL in .env is 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