使用 fabric-sdk-go 安装链代码时连接超时

Connection timeout when installing chaincode using fabric-sdk-go

我有一个问题,在使用 fabric-sdk-go 安装链码时总是出现 grpcs 超时。 GRCPS 请求是从本地计算机向其 docker 容器发出的。

错误消息:

lscc.getinstalledchaincodes failed: SendProposal failed: Transaction processing for endorser [localhost:7051]: Endorser Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection timed out [localhost:7051]

环境:

Mac OSX

docker version: 18.03.1-ce

docker-compose version 1.21.1, build 5a3f1a3

fabric-sdk-go: master

本地结构网络由 official fabric-ca example 设置。

docker-compose.yaml: Gist

本地网络-config.yaml:Gist

客户端转到应用程序:Gist

我的网络有问题吗-config.yaml???

我试过的:

  1. 试图在 docker-compose.yaml 中禁用 CORE_PEER_TLS_CLIENTAUTHREQUIRED,失败..

  2. 编辑了 /etc/hosts 文件中的 127.0.0.1 peer1-xiaoyudian...,失败..

  3. 增加了 peer.timeout.connections 和网络中的其他超时选项-config.yaml,失败..

  4. 增加了 grpcOptions.keep-网络中的活动时间-config.yaml,失败了..

  5. 将 peers.xxxx.url 的主机从本地主机更改为网络中的域-config.yaml,失败...

  6. 在网络中添加了 entityMathcers-config.yaml,失败...

  7. 失败....

回答: 来自 rocket.chat 的人告诉我:

  1. run: export GRPC_GO_LOG_SEVERITY_LEVEL=error
  2. run: export GRPC_GO_LOG_VERBOSITY_LEVEL=2
  3. in the client code add this line: grpclog.SetLogger(logger)

并且日志显示这是与同行握手的证书问题。

您可以尝试将本地主机更改为网络中的域。例如:with peer: localhost -> peer1-xiaoyudian... with orderer: localhost -> orderer1-themis... 与 ca 相同,并使用 entity matcher 将 peer name, orderer, ca 映射到你的 ip 地址。

参考https://github.com/hyperledger/fabric-sdk-go/tree/master/test/fixtures/config/overrides 了解如何覆盖 URL 以使用本地主机。在您的情况下,您必须在提供的样本中结合使用 local_entity_matchers.yaml & local_orderers_peers_ca.yaml

我在您的 network-config.yaml 中还注意到一件事,映射的主机名与实际的对等名称相同。实体匹配器不会在这里启动。请参考上面给出的示例中使用的实体匹配器。