-
将tendermint二进制文件放在工作目录中的build目录下,如workspace/build
-
从dokcer官方镜像库拉取tendermint/localnode镜像
docker image pull tendermint/localnode
3.创建多节点tendermint网络。若要部署任意节点的Tendermint网络,首先需要修改命令:testnet --v num1 --v num2,–v参数的意思是设置验证节点的数量;–n设置非验证节点的数量。
docker run --rm -v /etc/localtime:/etc/localtime -v workspace/build:/tendermint:Z tendermint/localnode testnet --v 5 --config /etc/tendermint/config-template.toml --o . --starting-ip-address 192.167.10.2
以上命令是设置5个验证节点。如果内存较小,节点数量设置较小即可,本人在16g内存上部署了8节点导致内存资源占用过高,然后部署了5个节点。
用 Docker 运行 tendermint/localnode 的镜像,并将当前目录下的 build 目录挂载到容器中的 /tendermint 目录下,并设置挂载路径为可共享(shared)模式,执行“testnet --config /etc/tendermint/config-template.toml --o . --starting-ip-address 192.167.10.2”命令启动tendermint网络,若没有指定节点数量,默认生成4个验证节点。
问题
nhl@harry:~/workspace/image$ docker run --rm -v
/etc/localtime:/etc/localtime -v ~/workspace/image/build:/tendermint:Z
tendermint/localnode testnet --v 5 --config
/etc/tendermint/config-template.toml --o . --starting-ip-address
192.167.10.2ERROR: open /etc/tendermint/config-template.toml: no such file or
directory
所以要删掉:–config /etc/tendermint/config-template.toml
创建多节点tendermint网络的命令变为:
docker run --rm -v /etc/localtime:/etc/localtime -v workspace/build:/tendermint:Z tendermint/localnode testnet --v 5 --o . --starting-ip-address 192.167.10.2
note: 需要修改各个节点的配置文件(node*/config)[rpc]中监听地址laddr = “tcp://0.0.0.0:26657”,否则无法向网络发送消息
4.配置docker-compose.yml文件如下,将docker-compose.yml文件放在工作目录下:
version: '3'
services:
node0:
container_name: node0
image: "tendermint/localnode"
ports:
- "26656-26657:26656-26657"
environment:
- ID=0
- LOG=${LOG:-tendermint.log}
volumes:
- ./build:/tendermint:Z
- /etc/localtime:/etc/localtime
networks:
localnet:
ipv4_address: 192.167.10.2
node1:
container_name: node1
image: "tendermint/localnode"
ports:
- "26659-26660:26656-26657"
environment:
- ID=1
- LOG=${LOG:-tendermint.log}
volumes:
- ./build:/tendermint:Z
- /etc/localtime:/etc/localtime
networks:
localnet:
ipv4_address: 192.167.10.3
node2:
container_name: node2
image: "tendermint/localnode"
environment:
- ID=2
- LOG=${LOG:-tendermint.log}
ports:
- "26661-26662:26656-26657"
volumes:
- ./build:/tendermint:Z
- /etc/localtime:/etc/localtime
networks:
localnet:
ipv4_address: 192.167.10.4
node3:
container_name: node3
image: "tendermint/localnode"
environment:
- ID=3
- LOG=${LOG:-tendermint.log}
ports:
- "26663-26664:26656-26657"
volumes:
- ./build:/tendermint:Z
- /etc/localtime:/etc/localtime
networks:
localnet:
ipv4_address: 192.167.10.5
node4:
container_name: node4
image: "tendermint/localnode"
environment:
- ID=4
- LOG=${LOG:-tendermint.log}
ports:
- "26665-26666:26656-26657"
volumes:
- ./build:/tendermint:Z
- /etc/localtime:/etc/localtime
networks:
localnet:
ipv4_address: 192.167.10.6
networks:
localnet:
driver: bridge
ipam:
driver: default
config:
-
subnet: 192.167.10.0/16
docker-compose.yaml 是 docker compose 工具使用的配置文件,用于定义多个 Docker 容器的服务、网络和卷等信息。如下是tendermint多节点网络的docker-compose配置文件,有5个容器服务,每个服务运行一个 “tendermint/localnode” Docker镜像的实例:所有服务都使用相同的卷./build,挂载到容器内的/tendermint目录。它们还使用相同的网络localnet,该网络被定义为一个网桥网络,IP地址范围为192.167.10.0/16。其中IPAM是指IP地址管理,它定义了一个子网,其中每个容器都可以使用自己的IP地址。driver: default表示使用默认的IP地址分配驱动程序,subnet: 192.167.10.0/16表示子网的地址范围。
5.运行多节点tendermint网络
docker-compose -f docker-compose.yml up
运行如图:
6.发送消息进行测试
curl -s 'localhost:26657/broadcast_tx_commit?tx="abcd"'