0

这是我的第一篇文章,所以我会尽量详细并展示重现这些错误的步骤。我想用其他对等点扩展给定的 Fabcar 示例,但我无法查询/调用扩展系统。如果我尝试查询系统,则会收到以下错误:

查询已完成,正在检查结果
来自查询的错误 = 错误:确保链码 fabcar 已成功实例化并重试:getccdata mychannel/fabcar 响应错误:找不到名为“fabcar”的链码
    在/home/hyperledger/Dokumente/Hyperledger_test/Fabric-SamplesV4/fabric-samples/fabcar/node_modules/fabric-client/lib/Channel.js:2638:24
    在 <匿名>

如果我运行 docker ps -a 命令,它会显示:

容器 ID 图像命令创建状态端口名称
7eabee4c4eb2 hyperledger/fabric-peer "peer node start" 39 分钟前 Up 38 分钟 0.0.0.0:8151->7051/tcp, 0.0.0.0:8153->7053/tcp peer1.org1.example.com
4aaf1b4c063b hyperledger/fabric-couchdb "tini -- /docker-ent..." 39 分钟前 39 分钟前 4369/tcp, 9100/tcp, 0.0.0.0:9984->5984/tcp couchdb1
831facf5abad hyperledger/fabric-peer "peer node start" 39 分钟前 Up 39 分钟 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
1a9cd9b9f3fb hyperledger/fabric-orderer "orderer" 39 分钟前 39 分钟前 0.0.0.0:7050->7050/tcp orderer.example.com
e33bfb4374eb hyperledger/fabric-couchdb "tini -- /docker-ent..." 39 分钟前 39 分钟前 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb
2cfb85e6aa9e hyperledger/fabric-ca "sh -c 'fabric-ca-se..." 39 分钟前 39 分钟前 0.0.0.0:7054->7054/tcp ca.example.com

如您所见,缺少 devpeer,如果您构建原始 Fabcar 示例,则会显示此 peer。

如果我为 peer0 运行 docker logs 命令,它会显示:

2018-08-16 07:21:29.804 UTC [ledgermgmt] CreateLedger -> INFO 023 使用创世块创建分类帐 [mychannel]
2018-08-16 07:21:29.838 UTC [fsblkstorage] newBlockfileMgr -> INFO 024 从块存储中获取块信息
2018-08-16 07:21:30.246 UTC [couchdb] CreateDatabaseIfNotExist -> INFO 025 创建状态数据库 mychannel_
2018-08-16 07:21:30.421 UTC [kvledger] CommitWithPvtData -> INFO 026 通道 [mychannel]:已提交块 [0] 与 1 个事务
2018-08-16 07:21:30.422 UTC [pvtdatastorage] func1 -> INFO 027 Purger 开始:清除过期的私有数据直到块号 [0]
2018-08-16 07:21:30.422 UTC [pvtdatastorage] func1 -> INFO 028 Purger 完成
2018-08-16 07:21:30.577 UTC [ledgermgmt] CreateLedger -> INFO 029 创建了带有创世块的分类帐 [mychannel]
2018-08-16 07:21:30.726 UTC [cscc] 初始化-> INFO 02a 初始化 CSCC
2018-08-16 07:21:30.726 UTC [sccapi] deploySysCC -> INFO 02b 系统链码 cscc/mychannel(github.com/hyperledger/fabric/core/scc/cscc) 部署
2018-08-16 07:21:30.726 UTC [sccapi] deploySysCC -> INFO 02c 系统链码 lscc/mychannel(github.com/hyperledger/fabric/core/scc/lscc) 部署
2018-08-16 07:21:30.727 UTC [qscc] 初始化-> INFO 02d 初始化 QSCC
2018-08-16 07:21:30.727 UTC [sccapi] deploySysCC -> INFO 02e 系统链码 qscc/mychannel(github.com/hyperledger/fabric/core/scc/qscc) 部署
2018-08-16 07:21:36.730 UTC [八卦/选举] beLeader -> INFO 02f [60 150 184 106 152 137 128 154 149 235 201 184 164 27 185 56 26 64 172 855 9 28 107 209 225 187 117]:成为领导者
2018-08-16 07:22:57.514 UTC [couchdb] CreateDatabaseIfNotExist -> INFO 030 创建状态数据库 mychannel_lscc
2018-08-16 07:22:57.519 UTC [lscc] Invoke -> ERRO 031 在通道 [mychannel] 上获取链码 fabcar 时出错:找不到名为“fabcar”的链码

我重现此结果的步骤:

在基本网络文件夹中进行了更改:

  1. Crypto-config.yaml - 将模板计数值更改为 2

  2. Docker-compose.yml - 复制 peer0 和 couchdb 并更改端口/名称

peer1.org1.example.com:
    容器名称:peer1.org1.example.com
    图片:超级账本/fabric-peer
    环境:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_PEER_ID=peer1.org1.example.com
      - CORE_LOGGING_PEER=信息
      - CORE_CHAINCODE_LOGGING_LEVEL=信息
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/
      - CORE_PEER_ADDRESS=peer1.org1.example.com:7051
      # # 以下设置在相同的地方启动链码容器
      # # 桥接网络作为对等点
      ## https://docs.docker.com/compose/networking/
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_basic
      # - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=true
      # - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      # - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      # - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
      # CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME 和 CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD
      # 提供账本连接到 CouchDB 的凭据。用户名和密码必须
      # 匹配为关联的 CouchDB 设置的用户名和密码。
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    工作目录:/opt/gopath/src/github.com/hyperledger/fabric
    命令:对等节点启动
    # 命令:对等节点启动 --peer-chaincodedev=true
    端口:
      - 8151:7051
      - 8153:7053
    卷:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/msp/peer
        - ./crypto-config/peerOrganizations/org1.example.com/users:/etc/hyperledger/msp/users
        - ./config:/etc/hyperledger/configtx
    取决于:
      - orderer.example.com
      -沙发数据库1
    网络:
      - 基本的

  沙发数据库1:
    容器名称:couchdb1
    图片:超级账本/fabric-couchdb
    # 填充 COUCHDB_USER 和 COUCHDB_PASSWORD 以设置管理员用户和密码
    # 对于 CouchDB。这将阻止 CouchDB 在“管理员方”模式下运行。
    环境:
      - COUCHDB_USER=
      - COUCHDB_PASSWORD=
    端口:
      - 9984:5984
    网络:
      - 基本的
  1. 运行 generate.sh 文件以创建所需的加密材料

  2. 扩展 start.sh 文件以在整个系统中创建新的对等体

    # 不要为 Windows Git Bash 用户重写路径
    导出 MSYS_NO_PATHCONV=1

    docker-compose -f docker-compose.yml 下来

    docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb

    睡眠 0.2

    docker-compose -f docker-compose.yml up -d peer1.org1.example.com couchdb1

    # 等待 Hyperledger Fabric 启动
    # 在运行以后的命令时出现错误,发出 export FABRIC_START_TIMEOUT=
    导出 FABRIC_START_TIMEOUT=10
    #echo ${FABRIC_START_TIMEOUT}
    睡眠 ${FABRIC_START_TIMEOUT}

    # 创建通道
    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 create -o orderer.example.com :7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
    # 将 peer0.org1.example.com 加入频道。
    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=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.example.com peer channel join -b mychannel.block

  1. 运行 start.sh 文件以启动系统

    • 运行 docker logs ca.example 以获取新的 ca.example 私钥并在 docker-compose.yml 文件中更改旧的

    • 再次运行 start.sh 文件,现在你应该可以在 docker 环境中看到新的对等体了

    • peer1 的 docker exec 命令出错:

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.example.com peer channel join -b mychannel.block
2018-08-16 08:06:35.608 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser 和 orderer 连接已初始化
错误:找不到创世块文件打开 mychannel.block:没有这样的文件或目录
  • 为什么第二个对等点的创世块丢失了,这个对等点是否可能无法访问该块?

    1. 切换到fabcar文件夹并运行startFabric.sh文件

    2. 注册管理员并注册用户

    3. 尝试查询新系统,您将得到如上所示的查询错误

问题:这些步骤中是否缺少某些内容,或者为什么无法在对等节点上安装链代码并正确运行网络?

4

1 回答 1

0

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 create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx

mychannel.block 在 peer0.org1.example.com docker 容器中创建。

当你运行这个命令时,它从 peer1.org1.example.com docker 容器运行,所以这不会有 mychannel.block 文件,所以你必须获取文件,然后运行 ​​2nd peer join 命令。

  docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.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" peer1.org1.example.com peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c mychannel

所以在加入第二个对等点之前添加这个 fetch 命令(peer1.org1.example.com)

像这样:

# Create 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 create -o orderer.example.com:7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx
    # 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

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.example.com peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c mychannel
    docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer1.org1.example.com peer channel join -b mychannel.block
于 2018-08-16T09:41:09.143 回答