使用fabric-sdk-node调用链码时提示sellcc.1.0文件不存在的问题求助
排查方向(对应报错peer0.sell.trace.com 找不到sellcc.1.0链码包)
这个报错的本质非常明确:报错指向的peer节点,本地存储路径下确实不存在名称、版本完全匹配的链码包文件,不存在“明明有文件还报错”的情况,按照以下步骤逐项核对即可定位问题:
- 第一步:直接进入报错peer的运行环境校验文件存在性
- 先确认peer的运行方式,如果是Docker容器部署,先执行
docker exec -it <对应peer容器ID/名称> bash进入容器内部,不要在宿主机的同路径下找文件——Docker的容器文件系统是隔离的,宿主机的/var/hyperledger/production和容器内的是完全两个路径 - 进入容器后执行
ls /var/hyperledger/production/chaincodes/,直接列目录里的实际文件,重点核对:- 文件名和版本和调用时用的
sellcc/1.0是不是完全字符串匹配,有没有大小写差异、多打空格、版本号格式不匹配(比如装的是v1.0、1.0.0,调用时写的1.0),Fabric对链码名、版本号是严格匹配,差一个字符都会识别失败
- 文件名和版本和调用时用的
- 先确认peer的运行方式,如果是Docker容器部署,先执行
- 第二步:核对链码安装、生命周期流程的操作正确性
- 检查安装链码时用的身份,是不是和当前peer所属组织的管理员身份匹配:如果拿其他组织的管理员身份执行安装命令,哪怕命令执行成功,链码包也不会存到当前peer的本地目录,只会记录在发起操作的组织的peer节点上
- 检查Fabric 2.x版本下的链码生命周期流程是否闭环:
- 给各peer安装链码包后,有没有在当前组织完成链码定义审批(approveForMyOrg)
- 有没有把链码定义提交到通道(commitChaincodeDefinition),且提交的定义中写的链码名称、版本号,和你实际安装到peer上的链码完全一致——很多人安装时的链码名,和提交到通道的定义名不一致,导致peer按通道定义的名字找本地链码包时找不到文件
- 第三步:核对SDK配置的peer地址是否指向正确节点
- 从报错日志看,SDK调用的peer地址是
grpc://localhost:7051,需要确认这个端口映射的后端,是不是你实际安装过sellcc链码的那个peer节点 - 新手测试时经常会同时跑多套Fabric环境,出现端口映射冲突:比如7051端口实际映射到了另一个从未安装过sellcc链码的peer容器,自然会报文件不存在的错误
- 从报错日志看,SDK调用的peer地址是
- 第四步:校验peer的配置路径是否被修改
- 如果手动调整过peer的core.yaml配置,要确认链码存储路径的配置项是否被改动过,不再是默认的
/var/hyperledger/production/chaincodes,避免按默认路径查半天,实际文件存在你改过的自定义路径下
- 如果手动调整过peer的core.yaml配置,要确认链码存储路径的配置项是否被改动过,不再是默认的
新手高频踩坑提醒:执行链码安装命令后,不要只看终端返回的链码包ID就判定安装成功——如果安装请求因为网络、权限问题没被peer节点接收,终端可能直接返回空结果,必须回到peer容器的存储目录下确认对应文件存在,才算安装流程完成。
内容的提问来源于stack exchange,提问作者OYU
相关产品推荐
相关产品推荐

