Hyperledger Fabric v2.3执行快照命令报context deadline exceeded如何解决
Fabric v2.3 快照命令执行失败解决方案
根因说明
你遇到的报错核心是peer snapshot命令未正确携带TLS参数导致与peer0的TLS握手失败,快照功能本身不需要在configtx.yaml中添加额外配置,仅需保证cli到目标peer的gRPC连接正常即可。
排查与解决步骤
- 第一步:先验证cli到peer0的基础连通性
在cli容器中执行如下命令测试基础连接,如果该命令执行失败,说明是peer0的基础连接配置问题,和快照功能无关:peer channel list --peerAddress peer0.org1.example.com:7051 --tls true --tlsRootCertFile /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - 第二步:修正快照提交命令的缺失参数
Fabric v2.x的peer客户端默认关闭TLS,官方测试网络默认开启peer侧TLS,你之前的命令缺少--tls true启用参数,会导致TLS握手失败,修正后的完整命令如下:peer snapshot submitrequest -c mychannel -b 0 --peerAddress peer0.org1.example.com:7051 --tls true --tlsRootCertFile /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - 第三步:排查TLS配置不匹配问题
如果执行修正后的命令仍然报TLS握手错误,检查peer0的core.yaml配置中peer.tls.enabled参数:- 如果参数值为
false,说明peer0未开启TLS,执行命令时需要移除所有TLS相关参数(--tls和--tlsRootCertFile) - 如果参数值为
true,确认你使用的根证书路径和peer0实际的TLS CA证书路径一致
- 如果参数值为
- 第四步:排查容器网络解析问题
日志中出现的172.19.0.1是Docker网关IP,出现该IP的连接失败说明容器内部域名解析异常,可在cli容器中执行ping peer0.org1.example.com确认解析到的IP是peer0的实际容器IP,若解析错误,可将命令中的peerAddress替换为peer0的实际容器IP+端口测试。
验证操作
命令提交成功后,可执行如下命令查看已提交的快照请求:
peer snapshot listpending -c mychannel --peerAddress peer0.org1.example.com:7051 --tls true --tlsRootCertFile /opt/gopath/src/github.com/hyperledger/fabric/peer/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
等peer生成对应快照后,请求会自动从待处理列表中移除。
内容的提问来源于stack exchange,提问作者raf
相关产品推荐
相关产品推荐

