hyperledger/besuHyperledger Besu是开源企业级客户端,符合企业联盟(EEA)规范,支持公共***网络、私有网络及联盟网络。本Docker镜像封装了Besu客户端,提供便捷部署方式,确保环境一致性,简化节点配置与维护,适用于开发、测试及生产环境。
通过Docker Hub获取官方镜像:
bash# 最新版本 docker pull hyperledger/besu:latest # 指定版本(示例:23.10.0) docker pull hyperledger/besu:23.10.0
bashdocker run -d \ --name besu-mainnet \ -p 30303:30303 \ # P2P端口(节点通信) -p 8545:8545 \ # HTTP RPC端口(外部调用) -v /host/path/to/data:/data \ # 数据持久化目录 hyperledger/besu:latest \ --network=mainnet \ # 连接***主网 --data-path=/data \ # ***数据存储路径 --rpc-http-enabled=true \ # 启用HTTP RPC --rpc-http-host=0.0.0.0 \ # RPC绑定所有网络接口 --rpc-http-cors-origins=* # 允许跨域请求(开发环境)
bashdocker run -d \ --name besu-goerli \ -p 30303:30303 \ -p 8545:8545 \ -v /host/path/to/goerli/data:/data \ hyperledger/besu:latest \ --network=goerli \ # 连接Goerli测试网 --data-path=/data \ --rpc-http-enabled=true \ --rpc-http-host=0.0.0.0 \ --rpc-http-api=ETH,NET,WEB3 # 启用常用RPC API模块
需提前准备创世文件(定义网络初始状态),示例genesis.json(PoA共识):
json{ "config": { "chainId": 1337, "muirGlacierBlock": 0, "constantinopleFixBlock": 0, "petersburgBlock": 0, "ethash": {} }, "nonce": "0x0", "timestamp": "0x5f8d78b0", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x1fffffffffffff", "difficulty": "0x1", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "***", "alloc": {}, "number": "0x0", "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" }
启动私有网络节点命令:
bashdocker run -d \ --name besu-private \ -p 30303:30303 \ -p 8545:8545 \ -v /host/path/to/genesis.json:/config/genesis.json \ # 挂载创世文件 -v /host/path/to/private/data:/data \ # 数据持久化 hyperledger/besu:latest \ --genesis-file=/config/genesis.json \ # 指定创世文件 --network-id=1337 \ # 自定义网络ID --data-path=/data \ --rpc-http-enabled=true \ --rpc-http-host=0.0.0.0 \ --p2p-host=192.168.1.100 # 节点对外IP(供其他节点连接)
创建docker-compose.yml部署2节点私有网络:
yamlversion: '3' services: node1: image: hyperledger/besu:latest container_name: besu-node1 ports: - "8545:8545" # RPC端口 - "30303:30303" # P2P端口 volumes: - ./genesis.json:/config/genesis.json - ./node1/data:/data command: > --genesis-file=/config/genesis.json --network-id=1337 --data-path=/data --rpc-http-enabled=true --rpc-http-host=0.0.0.0 --rpc-http-api=ETH,NET,IBFT --p2p-host=node1 --p2p-port=30303 -***-enabled=true -***-coinbase=*** # 矿工地址 node2: image: hyperledger/besu:latest container_name: besu-node2 ports: - "8546:8545" # 节点2 RPC端口 - "30304:30303" # 节点2 P2P端口 volumes: - ./genesis.json:/config/genesis.json - ./node2/data:/data command: > --genesis-file=/config/genesis.json --network-id=1337 --data-path=/data --rpc-http-enabled=true --rpc-http-host=0.0.0.0 --rpc-http-api=ETH,NET,IBFT --p2p-host=node2 --p2p-port=30303 --p2p-bootnodes=enode://<node1-enode-url> # 替换为node1的enode地址 depends_on: - node1
获取enode地址:启动node1后,执行
docker exec -it besu-node1 besu --data-path=/data public-key export --to=/data/enode.txt,从node1/data/enode.txt获取enode地址并更新node2配置。
| 参数 | 描述 | 示例 |
|---|---|---|
--genesis-file | 指定创世文件路径,定义网络初始状态 | --genesis-file=/config/genesis.json |
--network | 预定义网络(主网/测试网) | --network=goerli |
--network-id | 自定义网络ID(私有网络) | --network-id=1337 |
--data-path | ***数据存储路径 | --data-path=/data |
--rpc-http-enabled | 启用HTTP RPC接口 | --rpc-http-enabled=true |
--rpc-http-api | 启用的RPC API模块 | --rpc-http-api=ETH,NET,WEB3,IBFT |
--p2p-bootnodes | 启动节点列表(加入现有网络) | --p2p-bootnodes=enode://<enode>@192.168.1.100:30303 |
-***-enabled | 启用挖矿(PoW/PoA模式) | -***-enabled=true |
--logging | 日志级别(TRACE/DEBUG/INFO/WARN/ERROR) | --logging=INFO |
-v /host/path:/data挂载本地目录,避免容器重启数据丢失docker logs -f <容器名>实时查看日志;添加--logging=DEBUG调整日志详细度节点启动后,通过RPC接口验证状态:
bashcurl -X POST http://localhost:8545 \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
返回当前区块高度,确认节点正常同步。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务