尝试将对等体加入结构中的通道时出错

时间:2017-11-16 07:00:49

标签: hyperledger-fabric

我正在尝试使用两个渠道构建一个结构网络。一个对等体能够加入该通道,但在尝试加入第二个对等通道时会出现以下错误:

错误:找不到创世块文件打开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

如果出现问题,请更正。

5 个答案:

答案 0 :(得分:2)

我在相同的情况下运行并找到解决方案。 由于 mychannel.block 仅为 peer0.org2.example.com 容器所知,因此所有联接都必须从那里完成。 对于第二个同伴,您可以发出:

docker exec -e" CORE_PEER_LOCALMSPID = Org1MSP" -e" CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" -e" peer0.org1.example.com:7051" peer0.org2.example.com peer channel join -b mychannel.block

中号

答案 1 :(得分:1)

问题是 mychannel.block 仅在 peer0.org2.example.com 容器中可用(因为那是您运行频道创建命令的容器)。 peer0.org1.example.com 容器无法访问 mychannel.block ,这就是您收到错误的原因。

您需要做的是实际上要为两个容器安装共享卷,并确保在运行频道创建时在共享卷中输出 mychannel.block

答案 2 :(得分:0)

你需要检查你的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

在你的同伴1中你可能有;

    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]

答案 3 :(得分:0)

我遇到了同样的问题,但情况略有不同:我在一个组织(peer0)中有两个同龄人(peer1org1)。我使用以下命令将它们加入同一频道,并且可以正常工作:

//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

答案 4 :(得分:0)

此问题是由于在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。