我正在尝试构建一个具有两个通道的结构网络。一个对等体能够加入该通道,但在尝试加入第二个对等体时,会出现以下错误:
错误:找不到创世块文件打开mychannel.block:没有这样的文件或目录
这是我用于创建频道和加入对等的代码:
创建频道:
docker exec -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" peer0.org2.example.com peer channel create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
加入同行:
docker exec -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" peer0.org2.example.com peer channel join -b mychannel.block
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" peer0.org1.example.com peer channel join -b mychannel.block
如果出现问题,请更正。
我在相同的情况下运行并找到解决方案。由于mychannel.block仅为peer0.org2.example.com容器所知,因此必须从那里完成所有连接。对于第二个同伴,您可以发出:
docker exec -e“CORE_PEER_LOCALMSPID = Org1MSP”-e“CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp”-e“peer0.org1.example.com:7051”peer0.org2。 example.com对等通道加入-b mychannel.block
中号
问题是mychannel.block仅在peer0.org2.example.com容器中可用(因为那是您运行channel create命令的容器)。 peer0.org1.example.com容器无权访问mychannel.block,这就是您收到错误的原因。
您需要做的是实际上要做的是为两个容器安装共享卷,并确保在运行通道时创建mychannel.block在共享卷中输出
你需要检查你的docker-compose.yaml文件,看看你是如何在那里映射卷的
在两个对等体的定义中,确保有一个共同的映射卷,例如在peer0中你可能有这样的东西;
volumes:
- /var/run/:/host/var/run/
- ./:/etc/hyperledger/configtx
- ./crypto-config/peers/peer0/msp:/etc/hyperledger/peer/msp
- ./crypto-config/users/user0/msp:/etc/hyperledger/msp/users
在你的同伴中你可能有;
volumes:
- /var/run/:/host/var/run/
- ./:/etc/hyperledger/configtx
- ./crypto-config/peers/peer1/msp:/etc/hyperledger/peer/msp
- ./crypto-config/users/user1/msp:/etc/hyperledger/msp/users
您可以在这里看到有两个共享的卷映射,每个定义中的前两个指向示例位置。
所以要明确,卷映射定义如下:
[path on local machine]:[path to map in docker image]
我有同样的问题,但情况略有不同:我在一个组织(peer0
)有两个同伴(peer1
和org1
)。我使用以下命令将它们连接到同一个通道,它可以工作:
//Join peer0.org1.example.com to the channel
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e
"CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp"
peer0.org1.example.com peer channel join -b mychannel.block
//Join peer1.org1.example.com to the channel.
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e
"CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/[email protected]/msp" -e "CORE_PEER_ADDRESS=peer1.org1.example.com:7051" peer0.org1.example.com peer
channel join -b mychannel.block
此问题是由于在peer0.org1.example.com中找不到mychannel.block您可以将mychannel.block从peer0.org2.example.com复制到peer0.org1.example.com
尝试这些命令
docker cp peer0.org2.example.com:/opt/gopath/src/github.com/hyperledger/fabric/mychannel.block mychannel.block
docker cp mychannel.block peer0.org1.example.com:/opt/gopath/src/github.com/hyperledger/fabric/
sudo rm mychannel.block
现在尝试将peer0.org1.example.com重新加入mychannel。