完整的一段错误是:ERRO [core.comm] ServerHandshake -> Server TLS handshake failed in 13.997µs with error tls: first record does not look like a TLS handshake server=Orderer remoteaddress=172.24.0.1:47748。
也就是在Fabric网络连接后,链码安装后,无法激活链码实例化到orderer节点。
这个错误来源是批准链码定义:
[root ~/go/src]# peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --channelID mychannel --name mychain --version 1.0 --package-id <your_chaincode_package_id> --sequence 1 --waitForEvent
# <your_chaincode_package_id> 替换为实际的链码包 ID
sampleconfig
目录下的orderer.yaml文件,fabric-samples
寻找错误原因
检查(1)fabric网络是否真正启动:
docker ps
peer和orderer节点都启着(peer节点显示peer node start),代表fabric网络和peer节点和orderer节点都是开着的。
检查(2)域名,链码包ID是否存在
cd /etc/hosts
peer lifecycle chaincode queryinstalled
peer chaincode list --installed
# 命令二选一
检查(3)查看orderer的日志
docker logs orderer.example.com
发现了类似这样的报错↓(总而就是TLS握手失败导致的)
2023-07-10 09:22:42.834 UTC 0010 ERRO [core.comm] ServerHandshake -> Server TLS handshake
failed in 13.997µs with error tls: first record does not look like a TLS handshake
server=Orderer remoteaddress=172.24.0.1:47748
2023-07-10 09:22:43.835 UTC 0011 ERRO [core.comm] ServerHandshake -> Server TLS handshake
failed in 13.735µs with error tls: first record does not look like a TLS handshake
server=Orderer remoteaddress=172.24.0.1:47752
2023-07-10 09:22:45.378 UTC 0012 ERRO [core.comm] ServerHandshake -> Server TLS handshake
failed in 12.844µs with error tls: first record does not look like a TLS handshake
server=Orderer remoteaddress=172.24.0.1:47756
./fabric/fabric-samples/test-network/network.sh down
./fabric/fabric-samples/test-network/network.sh up
peer chaincode install -n mychain -v 1.0 -p mychain
peer chaincode list --installed
peer lifecycle chaincode approveformyorg -o orderer.example.com:7050 --channelID mychannel --name mychain --version 1.0 --package-id 6890e2d8e6a624c8de4ea3f0963c6535a0692fc08852a475718f5b5590b8839f --sequence 1 --waitForEvent
解决BUG
(1)能到批准这一步,说明TLS的证书都装完毕了,那么很可能是配置文件或环境变量的问题。
(2)查环境变量(对应自己的fabric-samples/test-network的绝对路径输入即可,后面的名字是一致的)
export ORDERER_TLS_ENABLED=true
export ORDERER_ADDRESS=orderer.example.com:7050
export ORDERER_TLS_FLAG="--tls"
export ORDERER_TLS_CAFILE=/root/go/src/fabric/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
export ORDERER_TLS_ROOTCERT_FILE=/root/go/src/fabric/fabric-samples/test-network/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt
如果有安装fabric源码,可能需要在sampleconfig
目录下的core.yaml文件把peer容器下的tls属性把enabled改为true。
(6)用脚本重启Fabric网络(如果已经开启,可能需要关闭再重启:./network.sh down)
./network.sh up
(7)然后重新输入启动命令:
peer chaincode install -n mychain -v 1.0 -p mychain
以上表面链码已成功安装 √ 。