Hyperledger Fabric创建通道报错:无法初始化加密目录不存在
看起来你的问题出在MSP配置路径的错误指向上,错误提示里的路径/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/hospital.medrecnet.com/users/Admin@hospital.medrecnet.com/msp明显不符合Fabric的目录结构——hospital.medrecnet.com是Peer组织,它的MSP文件应该在peerOrganizations目录下,而不是ordererOrganizations。
问题诊断
错误的核心原因是:执行peer channel create时,Peer节点尝试加载的MSP路径不存在,因为这个路径错误地指向了Orderer组织的目录下(而Hospital是Peer组织)。
具体解决方案
1. 验证并修正环境变量
进入CLI容器后,先检查当前的MSP配置路径是否正确:
echo $CORE_PEER_MSPCONFIGPATH
正常情况下,输出应该是:
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/hospital.medrecnet.com/users/Admin@hospital.medrecnet.com/msp
如果输出不对,手动重新设置环境变量:
export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/hospital.medrecnet.com/users/Admin@hospital.medrecnet.com/msp export CORE_PEER_LOCALMSPID=HospitalMSP
2. 确认Crypto配置目录结构正确
在主机的项目目录下,检查crypto-config文件夹的结构,确保Hospital组织的MSP文件确实存在:
crypto-config/ ├── ordererOrganizations/ │ └── medrecnet.com/ └── peerOrganizations/ ├── hospital.medrecnet.com/ │ └── users/ │ └── Admin@hospital.medrecnet.com/ │ └── msp/ # 这个目录必须存在 └── doctor.medrecnet.com/
如果该目录不存在,说明你生成Crypto配置的crypto-config.yaml有问题,或者生成命令执行有误。修正crypto-config.yaml中Peer组织的配置(示例):
PeerOrgs: - Name: Hospital Domain: hospital.medrecnet.com EnableNodeOUs: true Template: Count: 1 Users: Count: 1 - Name: Doctor Domain: doctor.medrecnet.com EnableNodeOUs: true Template: Count: 1 Users: Count: 1
然后重新生成Crypto配置:
cryptogen generate --config=./crypto-config.yaml
3. 修正peer channel create命令的格式问题
你的命令中--tls –cafile的第二个破折号是中文全角符号,换成英文半角的双短横线:
peer channel create -o orderer.medrecnet.com:7050 -c medrecnetChannel -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/medrecnet.com/orderers/orderer.medrecnet.com/msp/tlscacerts/tlsca.medrecnet.com-cert.pem
这个命令里的--cafile路径是正确的,因为它指向的是Orderer组织的TLS CA证书。
额外提示:提前修正Peer1的MSPID大小写问题
看你的docker-compose-base.yaml中,peer1.doctor.medrecnet.com的CORE_PEER_LOCALMSPID设置为doctorMSP,但根据Cryptogen的生成规则,MSPID应该是组织名称的首字母大写加MSP(即DoctorMSP),这个错误会导致后续Peer1加入通道失败,建议提前修正。
内容的提问来源于stack exchange,提问作者Bangun

