ファブリックバージョンは1.1.0-previewで、ピア、オーダー、configtxgenが新しく生成されます。
configtxgenツールを実行すると:
configtxgen -profile SoloOrdererGenesis -outputBlock genesis.block
configtxgen -profile mych -outputCreateChannelTx channel-artifacts/mych.tx -channelID mych
それは、genesis.blockを生成し、channelNameがmych.txである。
次に、注文者は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:
この問題が発生したとき、私の解決策は非常に簡単でした。
/byfn.sh -m up
それを忘れて、最初に暗号を生成してから同じコマンドを使用して開始しようとしていました。を使用して古いネットワークを最初にダウンするとすぐに問題は解決しました
/byfn.sh -m down
同じupコマンドで再び起動しました。
ファイルの間違ったパスの単純な問題である可能性が非常に高いです。 mych.tx
ファイルを生成したときに、channel-artifacts/mych.tx
に書き込みましたが、チャネルを作成しようとしたときに、channel-artifacts
ディレクトリを省略しました。 peer channel create -f channel-artifacts/mych.tx -o orderer.example.com:7050 -c mych
を試すことができます
そうは言っても、同じエラーで同様の問題が発生しました。新しく作成されたジェネシスブロックと暗号をテストしていました。私の場合、以前のテストの1つで、以前の暗号とチャネルがDockerボリュームに保存された結果でした。新しいピアとオーダーを作成していると言ったので、それはnotかもしれません。
docker exec -it <container name> bash
でピアの1つ(ある場合は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.....
「チャンネルピアが参加しました:」の下にmych
が表示されない場合、私の答えはあなたに関係ありません。 (しかし、他の誰かにかもしれません!)
ローカルのHyperledger Dockerインスタンスをクリーンな状態に復元する方法は次のとおりです。
docker-compose -f docker-compose.yaml down --volumes
--volumes
は、構成ファイル内のコンテナーに関連付けられているボリュームを削除するようDockerに指示します。
良い測定のために、私はすべてをスワイプして(all 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サービスが再起動されます。
この問題は何度も発生します。常にdocker volume Prune
解決します。
このページの解決策のいずれかがうまくいかなかった場合は、ネットワークをdockerネットワークから削除してみてください。 docker network ls
を実行してドッカーネットワークを表示し、docker network rm <network-name>
を実行してネットワークを削除します。
Dockerネットワークの削除はうまくいきましたが、開発サーバーでこれを行いました。
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-
artifacts/genesis.block -channelID $CHANNEL_NAME
ジェネシスブロックの作成中に、syschannelnameを渡す必要があります。
チャンネルの作成中は、別のチャンネル名を使用してください。
例:1.sysmych 2.mych
私の場合、問題は許可とネットワークがすでに(部分的に)稼働していることにありました。
Sudoを使用せずに "./byfn.sh up"で始めていたので、初めてerrorを得ました。
次に、 "Sudo su"を実行してから "./byfn up"を実行しました。再びerrorを取得しました。
ここで答えの1つを参照すると、スーパーユーザーであるため、「./ byfn down」を実行し、次に「./byfn up」を実行しましたが、これはうまくいきました。
注文者のデバッグログを共有すると、より明確になります。デバッグの追加を有効にするには
- ORDERER_GENERAL_LOGLEVEL=debug
注文者サービスの下のdocker composeファイルで、ネットワークを再起動します。その後、コマンドを使用してログを印刷できます
docker logs CONTAINER_NAME --details
Create channelコマンドを実行する前後にログを印刷することをお勧めします。