错误:获得了意外的状态:FORBIDDEN -- 未能达到1个子策略的隐式阈值,需要1个剩余:权限被拒绝。

10

我的fabric版本是1.1.0-preview,peer、orderer和configtxgen都是新生成的。

当我执行configtxgen工具时:

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

它使用channelName为mych生成genesis.block和mych.tx。

然后使用genesis.block启动orderer,我执行以下操作:

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

它抛出了错误,

Error: got unexpected status: FORBIDDEN -- Failed to reach implicit threshold of 1 sub-policies, required 1 remaining: permission denied

哪一步出错了?

我的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个回答

26

当我遇到这个问题时,我的解决方案非常简单...我已经开始使用我的网络

/byfn.sh -m up

我曾经忘记它,一开始尝试通过生成加密来启动它,然后使用同样的命令。 问题解决了,只要我首先关闭了旧网络。

/byfn.sh -m down

然后用相同的 "up" 命令重新开始。


1
最明显的解决方案,但每个人都没有注意到它。 - nilakantha singh deo
1
在这里对我来说关键是将标志--volume --remove-orphans添加到我的原始命令中,以删除容器,原始命令是Docker-compose -f docker-compose-cli.yaml down 因此整个正确的命令是: Docker-compose -f docker-compose-cli.yaml down --volumes --remove-orphan - Erik
这是完美的解决方案。 - gandharv garg
这是一个很好的解决方案,但我无法使用 ./byfn.sh -m down 命令来停用网络 net_byfn,因为它是处于激活状态的。如果有人无法通过 ./byfn.sh -m down 命令来解决问题,请尝试重新启动你的 Docker 并删除 net_byfn 然后再按照答案步骤操作。 - KC.

6
可能只是文件路径错误的小问题。在生成mych.tx文件时,您将其写入了channel-artifacts/mych.tx,但是在尝试创建通道时,您忽略了channel-artifacts目录。您可以尝试运行 peer channel create -f channel-artifacts/mych.tx -o orderer.example.com:7050 -c mych
话虽如此,我曾经遇到过同样的问题和错误。当时,我正在测试新创建的创世块和加密功能。在我的情况下,这是之前的加密和通道存储在Docker卷中的结果,这是我以前的一个测试的内容。那可能并不是你的问题,因为你说你正在创建新的对等方和orderer。
要检查这一点,请使用docker exec -it <容器名称> bash连接到其中一个对等节点(或cli容器,如果您有一个),然后运行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.....

如果您在“Channels peers has joined:”列表中找不到mych,那么我的回答与您无关(但可能对其他人有用!)。
以下是将本地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
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel- 
artifacts/genesis.block -channelID $CHANNEL_NAME

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

在创建通道时,请使用不同的通道名称。

例如: 1. sysmych 2. mych


0

如果您分享排序器的调试日志,将更清晰明了。要启用调试,请添加

- ORDERER_GENERAL_LOGLEVEL=debug 

在您的Docker Compose文件中,在orderer服务下,然后重新启动您的网络。然后,您可以使用命令打印日志。
docker logs CONTAINER_NAME --details

我建议在运行创建通道命令之前和之后打印日志。

0

如果您正在使用 Golang 1.14(Hyperledger Fabric 2.2 中使用),请注意不要设置 GOPATH。由于新的 Go 模块系统,这可能会导致问题:https://dev.to/maelvls/why-is-go111module-everywhere-and-everything-about-go-modules-24k - 因此请改用另一个变量,例如 gopath - RichVel

0
如果此页面上的任何解决方案都不起作用,请尝试从docker网络中删除您的网络。通过运行docker network ls查看您的Docker网络,然后通过运行docker network rm 来删除您的网络。
从docker网络中删除网络对我很有效,但我是在开发服务器上执行此操作的。

0

我遇到过这个问题很多次,总是使用 docker volume prune 命令来解决。


0
在我的情况下,问题出在权限以及网络已经部分连接上。
我一开始使用"./byfn.sh up"而没有使用sudo,所以第一次出现了错误。
接下来,我执行了"sudo su"然后运行"./byfn up",再次出现了错误。
参考这里的一个答案,作为超级用户,我执行了"./byfn down"然后"./byfn up",这次对我起作用了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接