Run a testnet full node in Docker
This guide connects a full node to the shared testnet. It does not create a validator or a new local chain.
Obtain the deployment inputs
Ask the team for the approved image digest, testnet genesis and application configuration, peer list, and any state-sync checkpoint. Verify the checksums and confirm the Cosmos chain ID is zel_9350-1.
Set ZEL_IMAGE to the approved lowercase image repository and immutable digest, ZEL_HOME to a new absolute data directory, and MONIKER_NAME to your node's name.
: "${ZEL_IMAGE:?Set the approved image digest}"
: "${ZEL_HOME:?Set a new absolute data directory}"
: "${MONIKER_NAME:?Set the node name}"
mkdir -p "$ZEL_HOME"
docker run --rm --entrypoint zel-cored \
--mount "type=bind,src=$ZEL_HOME,dst=/node" \
"$ZEL_IMAGE" init "$MONIKER_NAME" --chain-id zel_9350-1 --home=/node
Do not initialize over an existing node directory. Install the approved genesis.json and app.toml under $ZEL_HOME/config. Configure peers in config.toml; use only a current, team-verified checkpoint if enabling state sync.
Compose configuration
The host directory and container home must match the initialization step:
services:
node:
image: ${ZEL_IMAGE:?Set the approved image digest}
entrypoint: ["zel-cored"]
command: ["start", "--home=/node", "--rpc.laddr=tcp://0.0.0.0:26657"]
volumes:
- ${ZEL_HOME:?Set the node data directory}:/node
ports:
- "26656:26656"
- "127.0.0.1:26657:26657"
- "127.0.0.1:1317:1317"
- "127.0.0.1:9090:9090"
- "127.0.0.1:8545:8545"
- "127.0.0.1:8546:8546"
restart: unless-stopped
RPC ports bind to host loopback. Expose public APIs only through the approved gateway and firewall policy. Enable the required API listeners in the supplied application configuration.
docker compose up -d
docker compose ps
docker compose exec node zel-cored status --node tcp://127.0.0.1:26657
Check the reported network and synchronization state before relying on the node.
Recovery
Stop the node and inspect the error before changing data. Preserve the entire home directory and obtain the recovery procedure for that release.
Never zero, delete, or restore an older data/priv_validator_state.json for a key that has signed blocks on the same chain. Do not run two nodes with the same consensus key. Coordinate validator recovery with the team before restarting.