Web3BB

    • Register
    • Login
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Running BNB Smart Chain GETH on Docker

    BNB Smart Chain
    1
    1
    1560
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      web3master last edited by

      Running BNB Smart Chain Node in a Docker Container

      Description
      This document describes the process of configuring and running a BNB Smart Chain node (geth) using the docker container image from the official git repository.

      Prerequisites
      Server/Computer with at least 300GB+ of free disk space for testnet node
      Docker
      Official Docker Image

      Introduction to Docker
      Docker is a tool that makes it easier for developers to create and deliver applications in containers. Containers allow developers to put an application with all of its requirements, such as libraries and other dependencies and deploy it as a single image. When running the application the user doesn’t need to know all the requirements to run a specific application, because it is all bundled together in this image. Basically when you are inside of a container you feel like you are in a completely different host, it feels like a Virtual Machine but it is actually not. Each container shares the kernel within the host OS, allowing you to run multiple Docker containers on the same host.
      https://www.docker.com/

      Introduction to BSC Node
      A node is basically a blockchain software that runs on the computer/server, when this software is started it will make a copy of the entire blockchain to your local machine and it will broadcast its data to the blockchain network helping it by serving the network with data.

      Why run your own node?
      Not for Rewards

      Nodes that are not validators do not receive any reward because they are not validating blocks.

      Trust and Privacy
      Running your own node enables you to use BNB Smart Chain in a private, self-sufficient and trustless manner. You don't need to trust the network because you can verify the data yourself with your client.

      Potential Better Performance
      You have the control to decide what hardware specification you will build you own node on. This way you can potentially get better performance.
      No limits and More data
      When using public Nodes, specially for Dapps, the nodes have limits on the amount of calls you can make to the node. Also not all data is provided with public nodes, if you run your own node you can expose to yourself all the data from the blockchain, and be able to monitor things such as the transactions mem pool.

      Docker Installation
      https://docs.docker.com/get-docker/

      Desktop Users:
      https://docs.docker.com/get-docker/

      Ubuntu Linux:
      https://docs.docker.com/engine/install/ubuntu/

      Post install:

      Start docker during boot up:

      systemctl enable docker.service
      systemctl enable containerd.service

      Add user "ubuntu" to group docker so the user has privileges to run docker commands:

      sudo usermod -aG docker $USER

      Login: tsh ssh ubuntu@172.21.42.10
      Download Docker Container
      Instructions: https://github.com/bnb-chain/bsc/pkgs/container/bsc
      docker pull ghcr.io/bnb-chain/bsc:1.1.18_hf

      Important commands:
      List images available on your Docker host.

      $ docker images

      List running containers

      $ docker ps

      List stopped containers

      $ docker ps -a

      Check container logs

      $ docker logs containerName or ContainerID

      Show container details

      $ docker inspect containerName or ContainerID

      Shell access container
      $ docker exec -it containerName bash

      Node configuration
      Download Testnet or Mainnet config files

      Reference: https://docs.bnbchain.org/docs/validator/fullnode

      Create Directories
      mkdir -p ~/bsc/config
      mkdir -p ~/bsc/node

      if you are not running as root open permissions to node directory, this will permit that docker container create data under the node folder

      chmod 777 ~/bsc/node
      cd ~/bsc/config
      wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep testnet |cut -d" -f4)
      unzip testnet.zip
      cd ~/bsc

      PS: Don’t need to write genesis state
      Start Container

      $ docker run (options) imageName

      Example:
      $ docker run -d --name bsccontainer01 -v ~/bsc/node:/bsc/node -v ~/bsc/config:/bsc/config ghcr.io/bnb-chain/bsc:1.1.18_hf

      Options
      -d -> Detached from the screen. It will run the container in the background.
      –name -> name of the container
      -v -> For volume, in our case we are going to be binding our local disk to certain directories inside of the container

      -v ~/bsc/node:/bsc/nod -> Local ~/bsc/node will be mounted on /bsc/node in the container
      ~/bsc/config:/bsc/config -> Local ~/bsc/config directory will be mounted on /bsc/config in the container

      Check if container is running

      $ docker ps

      If it is running you can check the logs/output of the startup command

      $ docker logs bsccontainer01

      Check blockchain data logs
      docker exec -it bsccontainer01 tail -f node/bsc.log

      Connect to local Javascript interface using IPC and check synchronization status
      docker exec -it bsccontainer01 geth attach ipc:node/geth.ipc

      eth.syncing

      How to shell into the Container:
      $ docker exec -it bsccontainer01 bash

      How to expose HTTP Json RPC?

      Stop/start container
      $ docker stop bsccontainer01

      $ docker start bsccontainer01

      Remove container
      $ docker rm bsccontainer01

      Edit config.toml
      -> HTTPHost = "0.0.0.0"

      Run container with exposing RPC port to host
      $ docker run -d --name bsccontainer01 -p 8575:8575 -v ~/bsc/node:/bsc/node -v ~/bsc/config:/bsc/config ghcr.io/bnb-chain/bsc:1.1.18_hf

      Note: By default testnet configuration runs http json-rpc server on port 8575.
      -p 8575:8575 -> we are exposing port 8575 to the host that is running docker and it will map with port 8575 that is open in the container.
      After we run this you will be able to reach the http json rpc on port 8575 of the host such as follows:
      $ geth attach http://HOST_IP:8575

      How to make changes in the configuration or set geth flags?
      In order to pass custom changes (flag) to geth you can just need to add the flags to the end of the docker run command as follows:
      Stop container
      $ docker stop bsccontainer01

      Remove container
      $ docker rm bsccontainer01

      Run container with desired flags. The following example shows how to enable websocket and expose the websocket port.
      $ docker run -d --name bsccontainer01 -p 3335:3335 -p 8575:8575 -v ~/bsc/node:/bsc/node -v ~/bsc/config:/bsc/config ghcr.io/bnb-chain/bsc:1.1.18_hf --ws.port 3335 --ws.addr 0.0.0.0 --ws --ws.api eth,net,web3 --ws.origins "*"

      Test connection
      ./geth attach ws://172.21.42.10:3335
      Docker Compose
      Docker compose will help maintain the configuration of the docker, it will make it easier to start and shutdown your containers.
      “Docker run is entirely command line based, while docker-compose reads configuration data from a YAML file”
      Add the following to a docker-compose.yml file:
      Vi docker-compose.yml
      version: '3.6'
      services:
      bscnode:
      image: ghcr.io/bnb-chain/bsc:1.1.18_hf
      command: --ws.port 3335 --ws.addr 0.0.0.0 --ws --ws.api eth,net,web3 --ws.origins "*"
      restart: unless-stopped
      container_name: bsccontainer01
      ports:
      - 8575:8575
      - 3335:3335
      volumes:
      - ~/bsc/node:/bsc/node
      - ~/bsc/config:/bsc/config

      Stop Old Container and Remove
      docker stop bsccontainer01
      docker rm bsccontainer01

      Using Docker compose to control your container.

      Start
      $ docker compose up -d

      Stop (this will remove the container)
      $ docker compose down

      Extra Resources:
      https://confluence.toolsfdg.net/display/Technology/BNB+Smart+Chain+Docker+Runbook

      1 Reply Last reply Reply Quote 0
      • First post
        Last post