首页 > 解决方案 > 如何修改 Hyperledger Composer REST 服务器发行的卡片中的 connection.json 文件

问题描述

我按照教程使用带有 REST 服务器的 Google OAUTH 2.0使用 MongoDB Docker 映像来保存业务网卡。我正在尝试构建一个 Web 应用程序,其中有两个作曲家休息服务器。

第一个没有身份验证,允许用户创建新参与者并发行新卡。

此时,第二个作曲家 REST 服务器,经过身份验证(使用 Google OAUTH2.0)应该允许用户执行所有其他操作。无论如何,我一直收到错误:

尝试登录和获取用户上下文时出错。错误:尝试注册用户或加载通道配置时出错。错误:调用注册端点失败并出现错误 [错误:连接 ECONNREFUSED 127.0.0.1:7054]

我几乎可以肯定问题在于,由于 REST 服务器位于 docker 中,因此connection.json应更改名片中的文件以使主机可以访问。

我已经为我用来安装和启动网络的卡做了这个,所以现在该卡的文件是:

{"name":"hlfv1",
"x-type":"hlfv1",
"x-commitTimeout":300,
"version":"1.0.0",
"client":
{"organization":"Org1"
    ,"connection":
    {"timeout":
        {
            "peer":{"endorser":"300","eventHub":"300","eventReg":"300"},
            "orderer":"300"
        }
    }
},
"channels":
{"composerchannel":
    {
        "orderers":["orderer.example.com"],
        "peers":{"peer0.org1.example.com":{}}
    }
},

"organizations":
{
    "Org1":{
        "mspid":"Org1MSP",
        "peers":["peer0.org1.example.com"],
        "certificateAuthorities":["ca.org1.example.com"]
    }
},
"orderers":
{
    "orderer.example.com":
    {"url":"grpc://orderer.example.com:7050"}
},
"peers":
{
    "peer0.org1.example.com":
    {"url":"grpc://peer0.org1.example.com:7051"}
},
"certificateAuthorities":
{
    "ca.org1.example.com":
    {"url":"http://ca.org1.example.com:7054","caName":"ca.org1.example.com"}
}

}

但我的问题是,如何为 REST 服务器发行的每张新卡更改此文件?有没有办法将 REST 服务器配置为自动执行此操作?

标签: restdockerhyperledger-fabrichyperledgerhyperledger-composer

解决方案


假设您在本地运行一个简单的 Fabric(例如 Composer Tools 提供的 Development Fabric),那么您可以利用 Docker 端口转发连接到 localhost(通常为 127.0.0.1)上的 Fabric。但是,当您在 Docker 容器中运行时,localhost 只是反射回容器中,因此不使用 Docker 主机上的端口转发。本教程为容器创建了一个专用的“restadmin”卡,它将 localhost URL 替换为包含 Fabric 容器的容器名称的 URL,并且因为它们使用相同的 Docker 网络桥(composer_default),所以一切正常。

当您使用 Composer REST 服务器发布身份时,新身份(和卡)将使用“当前”ID 的 Connection.json 发布。

所以我猜在你的情况下,你的第一个 REST 服务器(无身份验证)在本地运行而不是在容器中,第二个多用户 REST 服务器在容器内运行。因此,您在 2 个 REST 服务器的 Fabric URL 之间存在不匹配。

也许解决方案是在本地运行它们,或者都作为容器运行,以便服务器之间的卡保持一致。


推荐阅读