错误:出现意外状态:FORBIDDEN - 无法达到1个子策略的隐含阈值,需要1个剩余:权限被拒绝

时间:2018-01-08 13:57:21

标签: hyperledger-fabric

我的结构版本是1.1.0预览版,对等版,订购者,configtxgen是新生成的。

当我执行configtxgen工具时:

configtxgen -profile SoloOrdererGenesis -outputBlock genesis.block 
configtxgen -profile mych -outputCreateChannelTx channel-artifacts/mych.tx -channelID mych

它生成genesis.block和mych.tx,channelName是mych。

然后orderer以genesis.block开头,执行以下命令:

peer channel create -f mych.tx -o orderer.example.com:7050 -c mych

它抛出错误,

  

错误:出现意外状态:FORBIDDEN - 无法达到1个子策略的隐含阈值,需要1个剩余:权限被拒绝

哪一步错了?

我的configtx.yaml文件是:

---
Profiles:
    SoloOrdererGenesis:
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
        Consortiums:
            SampleConsortium4:
                Organizations:
                    - *Org1
                    - *Org2
                    - *Org3
                    - *Org4
            SampleConsortium3:
                Organizations:
                    - *Org1
                    - *Org2
                    - *Org3
            SampleConsortium2:
                Organizations:
                    - *Org1
                    - *Org2
            SampleConsortium1:
                Organizations:
                    - *Org1
    mych4:
        Consortium: SampleConsortium4
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
                - *Org3
                - *Org4
    mych3:
        Consortium: SampleConsortium3
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
                - *Org3

    mych2:
        Consortium: SampleConsortium2
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2

    mych1:
        Consortium: SampleConsortium1
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: orderer/msp

    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: org1/peer/msp
        AnchorPeers:
            - Host: peer.org1.example.com
              Port: 17051
    - &Org2
        Name: Org2MSP
        ID: Org2MSP
        MSPDir: org2/peer/msp
        AnchorPeers:
            - Host: peer.org2.example.com
              Port: 27051            
Orderer: &OrdererDefaults
    OrdererType: solo
    Addresses:
        - orderer.example.com:7050
    BatchTimeout: 2s
    BatchSize:
        MaxMessageCount: 10
        AbsoluteMaxBytes: 99 MB
        PreferredMaxBytes: 512 KB
    Organizations:

Application: &ApplicationDefaults
    Organizations:

8 个答案:

答案 0 :(得分:22)

当我遇到这个问题时,我的解决方案很简单..我已经使用

启动了我的网络
/byfn.sh -m up

忘了它并试图通过生成加密然后使用相同的命令来启动它。 一旦我第一次使用

击落旧网络,问题就解决了
/byfn.sh -m down

并使用相同的up命令重新开始。

答案 1 :(得分:4)

很可能是文件错误路径的简单问题。生成mych.tx文件时,您将其写入channel-artifacts/mych.tx,但在尝试创建频道时,您遗漏了channel-artifacts目录。您可以尝试peer channel create -f channel-artifacts/mych.tx -o orderer.example.com:7050 -c mych

那就是说,我遇到了同样错误的类似问题。我正在测试一个新创建的起源块和加密。就我而言,这是前一个加密和通道存储在我以前的一个测试中的Docker卷中的结果。这可能就是你的情况,因为你说你正在创建一个新的同伴和订货人。

您可以通过连接到其中一个对等方(或cli容器,如果有的话)与docker exec -it <container name> bash然后运行peer channel list来检查。如果你得到这样的东西,那就是你的问题:

root@4cf873123669:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer channel list
2018-04-05 14:09:40.734 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2018-04-05 14:09:40.734 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2018-04-05 14:09:40.739 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
2018-04-05 14:09:40.740 UTC [msp/identity] Sign -> DEBU 004 Sign: plaintext: 0AAE070A5C08031A0C08A4DC98D60510...631A0D0A0B4765744368616E6E656C73
2018-04-05 14:09:40.740 UTC [msp/identity] Sign -> DEBU 005 Sign: digest: 93EFB49DD86ABB5568DE1E2C8FC53FA99AB52929AFA24D7B317C270DE8CDC80B
Channels peers has joined:
mych
2018-04-05 14:09:40.743 UTC [main] main -> INFO 006 Exiting.....

如果您没有看到&#34下列出的mych;频道对等已加入:&#34;,那么我的回答与您无关。 (但可能是其他人!)

以下是将本地Hyperledger Docker实例恢复到干净状态的方法:

docker-compose -f docker-compose.yaml down --volumes

--volumes告诉Docker删除与配置文件中的容器关联的所有卷。

为了更好的衡量,我只是擦掉所有东西(所有 Docker容器和卷 - 这是一个测试系统),直到空白的平板并开始整个过程​​:

docker-compose -f docker-compose.yaml down --volumes
docker rm $(docker ps -aq)
docker volume prune
rm genesis.block channel-artifacts/mych.tx

一旦我删除了这些,并启动了Fabric备份,我就能够创建频道而不会出现错误。

如果它不起作用,将是sudo service docker restart,它将重新启动所有docker服务,如docker系统,网络和卷。

答案 2 :(得分:0)

如果共享订购者的调试日志,将会更加清楚。要启用调试,请添加

- ORDERER_GENERAL_LOGLEVEL=debug 
在订购者服务下的docker compose文件中

,然后重新启动网络。然后可以使用命令

打印出日志
docker logs CONTAINER_NAME --details

我建议在运行create channel命令之前和之后打印日志。

答案 3 :(得分:0)

如果该页面上的任何解决方案都无法解决,请尝试从Docker网络中删除您的网络。通过运行docker network ls查看docker网络,并通过运行docker network rm <network-name>删除网络。

移除docker网络对我来说是可行的,但是我是在开发服务器上完成的。

答案 4 :(得分:0)

在我的情况下,问题出在权限以及网络已经建立(部分)。

我从不使用sudo开始使用“ ./byfn.sh up”,所以我第一次遇到了错误

接下来,我执行了“ sudo su”,然后运行了“ ./byfn up”,再次出现了错误

在这里我是超级用户,请参考答案之一,我现在先执行“ ./byfn down”,然后执行“ ./byfn up”,这对我来说很有用。

答案 5 :(得分:0)

我多次遇到此问题,请始终使用docker volume prune来解决。

答案 6 :(得分:0)

configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel- 
artifacts/genesis.block -channelID $CHANNEL_NAME

在创建创世块时,您需要传递syschannelname。

在创建频道时,请使用其他频道名称。

例如: 1.sysmych 2.mych

答案 7 :(得分:-1)

我遇到了相同的错误,如下所述

您可能需要添加

也要通行

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

echo $GOPATH

后跟/byfn.sh -m down,如果它早到了。
参考: https://hyperledger-fabric.readthedocs.io/en/release-1.1/prereqs.html