Hyperledger fabric 尝试加入结构中的对等通道时出错

Hyperledger fabric 尝试加入结构中的对等通道时出错,hyperledger-fabric,Hyperledger Fabric,我正在尝试构建一个具有两个通道的结构网络。一个对等方可以加入通道,但在尝试加入第二个对等通道时,出现以下错误: 错误:找不到genesis块文件打开mychannel.block:没有这样的文件或目录 这是我用于创建渠道和加入同行的代码: docker exec -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org2.example.com/msp" p

我正在尝试构建一个具有两个通道的结构网络。一个对等方可以加入通道,但在尝试加入第二个对等通道时,出现以下错误:

错误:找不到genesis块文件打开mychannel.block:没有这样的文件或目录

这是我用于创建渠道和加入同行的代码:

docker exec -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org2.example.com/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/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel.block
创建频道:

docker exec -e "CORE_PEER_LOCALMSPID=Org2MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org2.example.com/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/Admin@org2.example.com/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/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel.block

如果出现问题,请更正。

问题在于mychannel.block仅在peer0.org2.example.com容器中可用(因为您在该容器中运行了通道创建命令)。peer0.org1.example.com容器没有访问mychannel.block的权限,因此会出现错误


您需要做的是,实际上必须为两个容器装载一个共享卷,并确保在运行channel create时在共享卷中输出block,我在相同的情况下运行并找到解决方案。 由于只有peer0.org2.example.com容器才知道mychannel.block,因此必须从那里进行所有连接。 对于第二个对等点,您可以发布:

docker exec-e“CORE\u PEER\u LOCALMSPID=Org1MSP”-e“CORE\u PEER\u MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp“-e”peer0.org1.example.com:7051”peer0.org2.example.com对等通道连接-b mychannel.block


M

您需要检查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]

我也遇到了同样的问题,但情况略有不同:我在一个组织(
org1
)中有两个对等方(
peer0
peer1
)。我使用以下命令将它们连接到同一个通道,并且可以正常工作:

//Join peer0.org1.example.com to the channel

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e 
"CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/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/Admin@org1.example.com/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。

如何为2个容器装载共享卷?我对织物不熟悉。谢谢。@saya2k,这与织物无关。这是一个docker问题。如果你已经解决了相同的问题,请分享解决方案!您能否澄清一下
-e“peer0.org1.example.com:7051”
在命令行中的含义?