Skip to main content

Install Prysm with Docker

Prysm can be installed on Windows, GNU/Linux, and MacOS systems with Docker.

Pro-Tip

The Prysm Quickstart is the easiest way to install Prysm. Docker is for advanced users.

Have questions? Stop by the #documentation channel on Discord and let us know.

System requirements#

Minimum specifications#

These specifications must be met in order to successfully run the Prysm client.

  • Operating System: 64-bit Linux, Mac OS X 10.14+, Windows 64-bit
  • Processor: Intel Core i5โ€“760 or AMD FX-8100 or better
  • Memory: 8GB RAM
  • Storage: 20GB available space SSD
  • Internet: Broadband connection

Recommended specifications#

These hardware specifications are recommended, but not required to run the Prysm client.

  • Processor: Intel Core i7โ€“4770 or AMD FX-8310 or better
  • Memory: 16GB RAM
  • Storage: 100GB available space SSD
  • Internet: Broadband connection

Dependencies#

  • A modern operating system
  • The latest release of Docker installed

Installing Prysm#

Where is the Prysm Dockerfile?#

Instead of manually writing Dockerfiles, our team relies on the Bazel build system used by major companies to manage mono-repositories. Bazel has the option to generate and push minimal Docker images to a registry, which is what we use for Prysm. Bazel provides reproducible builds and a sandboxed environment that ensures everyone building Prysm has the same experience and can build our entire project from a single command. To see how to build the Docker images yourself from scratch for your own purposes, see our instructions here.

Downloading the Prysm Docker images#

  1. Ensure you are running the most recent version of Docker by issuing the command:
docker -v
  1. Ensure that your user is a member of the docker group by issuing the command, where username is your user:
sudo usermod -aG docker username

Any changes made will take effect when your user next logs in.

  1. To pull the Prysm images, issue the following commands:
docker pull gcr.io/prysmaticlabs/prysm/validator:stabledocker pull gcr.io/prysmaticlabs/prysm/beacon-chain:stable
Ropsten

If you want to use the Ropsten test network, replace the gcr.io links throughout this guide with links to the latest release candidate image:

gcr.io/prysmaticlabs/prysm/validator@sha256:7ac120abe8732512ed9e8e193f00076ac05b75133ec3b04eca37921bad3ae07agcr.io/prysmaticlabs/prysm/beacon-chain@sha256:bf9b95661c71ad60f633ee14cf352a668d550076471154cf80dfef8fce0bb41e

This guide will soon be revised with an updated structure that makes it easier for you to use docker with testnets and release candidates. Until then, visit our quickstart for the latest Ropsten instructions.

This process will also install any related dependencies.

Pro-Tip

For advanced users, the beacon-chain and validator images with debugging tools bundled in can be fetched instead by appending -alpine to the end of the images in the pull commands above. For example: docker pull .../prysm/validator:latest-alpine.

Below are various methods of controlling the beacon node in Docker installations.

The beacon node can be halted by either using Ctrl+c or with the command:

docker stop beacon-node

To restart the beacon node, issue the following command:

docker start -ai beacon-node

To delete a corrupted container, issue the following command:

docker rm beacon-node

To recreate a deleted container and refresh the chain database, issue the start command with an additional --clear-db parameter where <YOUR_ETH_EXECUTION_NODE_ENDPOINT> is in the format of an http endpoint such as http://host:port (ex: http://localhost:8545 for geth) or an IPC path such as /path/to/geth.ipc:

docker run -it -v $HOME/.eth2:/data -p 4000:4000 -p 13000:13000 -p 12000:12000/udp --name beacon-node \  gcr.io/prysmaticlabs/prysm/beacon-chain:stable \  --datadir=/data \  --clear-db \  --rpc-host=0.0.0.0 \  --monitoring-host=0.0.0.0 \  --http-web3provider=<YOUR_ETH_EXECUTION_NODE_ENDPOINT>

Before you begin: pick your network#

When running a Prysm beacon node or validator, you can choose to run in the main network which has real assets at stake, or in a test network which is used by developers and stakers that might want to gain some confidence before depositing 32 ETH to validate. The currently supported networks in Prysm are:

  • Mainnet: the current, live version of Ethereum proof-of-stake with billions of dollars' worth of real ETH at stake
  • Prater testnet: a staging testnet for developers and validators who want to try things out before hopping into the real mainnet
  • Ropsten testnet: a consensus-layer staging testnet created specifically to help developers and validators test the Merge using execution-layer Ropsten testnet
Using testnets

Mainnet is enabled by default in all Prysm commands. If you want to use a testnet, add --prater or --ropsten to all Prysm commands within this document.

Running a Beacon Node#

Step 1: Set up an execution node endpoint#

First, let's run a beacon node connected to the main Ethereum network. To run a beacon node, you will need access to an execution client software. We have dedicated instructions for this here.

Step 2: Sync your beacon node#

Note: <YOUR_ETH_EXECUTION_NODE_ENDPOINT> is in the format of an http endpoint such as http://host:port (ex: http://localhost:8545 for geth) or an IPC path such as /path/to/geth.ipc.

Mainnet

docker run -it -v $HOME/.eth2:/data -p 4000:4000 -p 13000:13000 -p 12000:12000/udp --name beacon-node \  gcr.io/prysmaticlabs/prysm/beacon-chain:stable \  --datadir=/data \  --rpc-host=0.0.0.0 \  --monitoring-host=0.0.0.0 \  --http-web3provider=<YOUR_ETH_EXECUTION_NODE_ENDPOINT>

Prater

Download the genesis state from github.com/eth-clients/eth2-networks/raw/master/shared/prater/genesis.ssz to a local file, then run

docker run -it -v $HOME/.eth2:/data -v /path/to/genesis.ssz:/genesis/genesis.ssz -p 4000:4000 -p 13000:13000 -p 12000:12000/udp --name beacon-node \  gcr.io/prysmaticlabs/prysm/beacon-chain:stable \  --datadir=/data \  --rpc-host=0.0.0.0 \  --monitoring-host=0.0.0.0 \  --http-web3provider=<YOUR_ETH_EXECUTION_NODE_ENDPOINT> \  --genesis-state=/genesis/genesis.ssz \  --prater

Ropsten

Download the genesis state from github.com/eth-clients/merge-testnets/blob/main/ropsten-beacon-chain/genesis.ssz to a local file, then run

docker run -it -v $HOME/.eth2:/data -v /path/to/genesis.ssz:/genesis/genesis.ssz -p 4000:4000 -p 13000:13000 -p 12000:12000/udp --name beacon-node \  gcr.io/prysmaticlabs/prysm/beacon-chain@sha256:bf9b95661c71ad60f633ee14cf352a668d550076471154cf80dfef8fce0bb41e \  --datadir=/data \  --rpc-host=0.0.0.0 \  --monitoring-host=0.0.0.0 \  --http-web3provider=<YOUR_ETH_EXECUTION_NODE_ENDPOINT> \  --genesis-state=/genesis/genesis.ssz \  --ropsten

Running a Validator#

A validator is an optional process that can be attached to a running beacon node to stake your ETH and participate in the chain's consensus. It is the analogue of a miner from proof-of-work-based systems.

Using testnets

Never deposit real ETH into testnet deposit contracts! Every testnet has its own test ETH that should be used instead.

Step 1: Ensure your beacon node is synced#

An important step in the process is ensuring your beacon node is all set up before trying to run a validator. This is because after your validator is inducted into the participating validator set, it is expected to begin performing its duties almost right away. It is important to run a validator with a node that is synchronized to the chain head so you can start earning ETH instead of losing it.

Syncing your node

The beacon-chain node you are using should be completely synced before submitting your deposit. You may incur minor inactivity balance penalties if the validator is unable to perform its duties by the time the deposit is processed and activated by the beacon chain network.

You can check the sync status of your node with the following command on most systems:

curl http://localhost:3500/eth/v1alpha1/node/syncing

If your node is done synchronizing, you will see the response:

{"syncing":false}%

Step 2: Send your validator deposit via the Ethereum validator launchpad#

Ensure You Are Not Being Scammed

The correct address for the launchpad is https://launchpad.ethereum.org and the only, official validator deposit contract is 0x00000000219ab540356cbb839cbe05303d7705fa. Do not send ETH directly to the contract, and only join by using the Ethereum.org launchpad.

The Mainnet Launchpad is the most secure way to deposit your 32 ETH to become a validator. If you want to participate in the testnet, you can navigate to the Prater or Ropsten launchpads.

Throughout the process, you'll be asked to generate new validator credentials using the official Ethereum deposit command-line-tool here. Make sure you use the mainnet option when generating keys with the deposit CLI. During the process, you will have generated a validator_keys folder under the eth2.0-deposit-cli directory. You can import all of your validator keys into Prysm from that folder in the next step.

Step 3: Import keystores into Prysm#

For this step, you'll need to copy the path to the validator_keys folder under the eth2.0-deposit-cli directory you created during the launchpad process. For example, if your eth2.0-deposit-cli installation is in your $HOME (or %LOCALAPPDATA% on Windows) directory, you can then run the following commands for your operating system

Note: You will be asked to do a one time acknowledgement of our Terms of Use. You can also read the legal terms first, then confirm them via a flag using --accept-terms-of-use in both your beacon node and validator.

docker run -it -v $HOME/eth2.0-deposit-cli/validator_keys:/keys \  -v $HOME/Eth2Validators/prysm-wallet-v2:/wallet \  --name validator \  gcr.io/prysmaticlabs/prysm/validator:stable \  accounts import --keys-dir=/keys --wallet-dir=/wallet

Step 4: Run your Prysm validator#

Open a second terminal window. Depending on your platform, issue the appropriate command from the examples below to start the validator.

docker run -it -v $HOME/Eth2Validators/prysm-wallet-v2:/wallet \  -v $HOME/Eth2:/validatorDB \  --network="host" --name validator \  gcr.io/prysmaticlabs/prysm/validator:stable \  --beacon-rpc-provider=127.0.0.1:4000 \  --wallet-dir=/wallet \  --datadir=/validatorDB

Step 5: Wait for your validator assignment#

Please note it will take time for nodes in the network to process a deposit. To understand the timeline of becoming a validator and how long it takes on average, please read this knowledge base. In the meantime, leave both terminal windows open and running; once the validator is activated by the ETH2 network, it will immediately begin receiving tasks and performing its responsibilities. If the eth2 chain has not yet started, the validator will be ready to start proposing blocks and signing votes as soon as the genesis time is reached.

To check on the status of your validator, we recommend checking out the popular block explorers: beaconcha.in by Bitfly and beacon.etherscan.io by the Etherscan team.

image

Advanced Configuration and Key Management#

For running an advanced wallet setups, our documentation includes comprehensive guides as to how to use the wallet built into Prysm to recover another wallet, use a remote signing server, and more. You can read more about it here.

Congratulations, you are now fully participating in Ethereum proof-of-stake

Still have questions? Stop by our Discord for further assistance!