Hyperledger Fabric 1.0添加CouchDB持久性时出错

Hyperledger Fabric 1.0添加CouchDB持久性时出错,couchdb,hyperledger-fabric,Couchdb,Hyperledger Fabric,我可以很好地运行Hyperledger Fabric 1.0“first network”示例 现在,我尝试将CouchDB持久性添加到此示例中,如和中所述 我在fabric samples/first network/byfn.sh中编辑networkUp()函数,将行更改为: CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1 致: 我还编辑文件f

我可以很好地运行Hyperledger Fabric 1.0“first network”示例

现在,我尝试将CouchDB持久性添加到此示例中,如和中所述

我在fabric samples/first network/byfn.sh中编辑networkUp()函数,将行更改为:

CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1
致:

我还编辑文件fabric samples/first network/docker-compose-coach.yaml更改块:

services:
  couchdb0:
    container_name: couchdb0
    image: hyperledger/fabric-couchdb
    ports:
      - "5984:5984"
    networks:
      - byfn
致:

当我使用命令运行它时:

yes | sudo ./byfn.sh -m generate
yes | sudo ./byfn.sh -m up
在它列出“通道“mychannel”成功创建后,我立即收到错误信息:

UTC [grpc] Printf -> DEBU 003 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: Error while dialing dial tcp 172.18.0.8:7051: getsockopt: connection refused"; Reconnecting to {peer0.org1.example.com:7051 <nil>}
UTC[grpc]Printf->DEBU 003 grpc:addrConn.resetTransport未能创建客户端传输:连接错误:desc=“传输:拨号tcp时出错172.18.0.8:7051:getsockopt:连接被拒绝”;正在重新连接到{peer0.org1.example.com:7051}
非常感谢您的帮助


提前谢谢

RHEL 7.3上没有出现此问题,因此我将CentOS从7.2更新为7.3,如中所述,我的问题得到了解决

作出的更改:

1) 创建文件夹

mkdir /home/vagrant/db0
2) 在byfn.sh的networkUp()中更改:

#  CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1
CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f docker-compose-cli.yaml -f docker-compose-couch.yaml up -d 2>&1
3) 在docker-compose-couchdb.yaml中添加了最后两个“卷:”行:

 services:
  couchdb0:
    container_name: couchdb0
    image: hyperledger/fabric-couchdb
    ports:
      - "5984:5984"
    networks:
      - byfn
    volumes:
      - /home/vagrant/db0:/opt/couchdb/data

docker容器以用户couchdb开始。因此,当您尝试共享数据目录的卷时,docker容器会尝试创建此文件夹并将所有权分配给root用户。因此,我认为用户变量应该在dockerfile中留空,而不是将其指定为couchdb。我的环境是RHEL 7.3版(Maipo)。为了解决这个问题,我使用以下命令启动了容器,并将用户指定为root用户

docker run --rm -itd --name couchdb0 --user root \
--publish 5984:5984 \
--volume /var/hyperledger/couchdb0:/opt/couchdb/data \
hyperledger/fabric-couchdb:x86_64-1.0.0

在上面的错误行之后,我还得到:error get endorser client channel:PER:404-尝试连接到本地peermate时出错,我遇到了类似的问题,leveldb一切正常,但当我更改为couchdb时,我的事件侦听器功能崩溃,连接失败,你能帮我弄清楚你是怎么解决的吗?我在AWS ubuntuHello中运行fabric network,以澄清:在我去年的案例中,它与Linux内核更新有关。祝你好运
 services:
  couchdb0:
    container_name: couchdb0
    image: hyperledger/fabric-couchdb
    ports:
      - "5984:5984"
    networks:
      - byfn
    volumes:
      - /home/vagrant/db0:/opt/couchdb/data
docker run --rm -itd --name couchdb0 --user root \
--publish 5984:5984 \
--volume /var/hyperledger/couchdb0:/opt/couchdb/data \
hyperledger/fabric-couchdb:x86_64-1.0.0