在这个特定错误上,我正在与Node.js Hyperledger Fabric客户端库苦苦挣扎:
我已经将我的区块链网络(Hyperledger Fabric 1.4)部署在具有IP的一台服务器上,并且从另一台服务器可见所有需要的端口。文档中提供的所有示例/示例都是通过本地主机引用网络。
如何启动客户端应用程序并将其指向网络的IP地址而不是本地主机或对等容器名称(例如peer0.org1.example.com)?
每个客户端应用程序是否必须将admin和user注册到其本地持久性存储中,或者它只能由网络本身完成一次(并且可能在以后的阶段从网络安装到应用程序)?我们在这里讨论的是在一台主机上的Dockerized网络,在另一台主机上的客户端应用程序(也为Dockerized)。
还有如何启动应用程序并连接到例如如果要求在调用createPeer
方法时存在.pem证书文件,则通过GRCPS进行排序?
非常感谢您在这里提供的任何帮助。
EDIT,2020年3月12日:
我正在使用基本网络示例进行网络更改,以创建3个组织,每个组织3个对等方和5个Raft订购方。我已经复制了connection-org1.json文件,将localhost更改为我的外部服务器IP,并且出现以下错误:
2020-03-12T12:45:31.503Z - error: [SingleQueryHandler]: evaluate: message=No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"], stack=FabricError: No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"]
at SingleQueryHandler.evaluate ((...)/network_files/javascript/node_modules/fabric-network/lib/impl/query/singlequeryhandler.js:44:17), name=FabricError
Failed to evaluate transaction: FabricError: No peers available to query. Errors: ["14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed","14 UNAVAILABLE: DNS resolution failed"]
我能够使用外部IP上托管的网络在本地计算机上成功注册和注册admin和user。但是我无法使用连接配置文件查询链码。
这是我的连接配置文件:
{
"name": "first-network-org1",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com",
"peer1.org1.example.com",
"peer2.org1.example.com"
],
"certificateAuthorities": [
"ca.org1.example.com"
]
}
},
"peers": {
"peer0.org1.example.com": {
"url": "grpcs://<IP>:7051",
"tlsCACerts": {
"pem": "<CERT>"
},
"grpcOptions": {
"ssl-target-name-override": "peer0.org1.example.com",
"hostnameOverride": "peer0.org1.example.com"
},
"endorsingPeer": true,
"chaincodeQuery": true,
"ledgerQuery": true,
"eventSource": true
},
"peer1.org1.example.com": {
"url": "grpcs://<IP>:8051",
"tlsCACerts": {
"pem": "<CERT>"
},
"grpcOptions": {
"ssl-target-name-override": "peer1.org1.example.com",
"hostnameOverride": "peer1.org1.example.com"
}
},
"peer2.org1.example.com": {
"url": "grpcs://<IP>:9051",
"tlsCACerts": {
"pem": "<CERT>"
},
"grpcOptions": {
"ssl-target-name-override": "peer2.org1.example.com",
"hostnameOverride": "peer2.org1.example.com"
}
}
},
"certificateAuthorities": {
"ca.org1.example.com": {
"url": "https://<IP>:7054",
"caName": "ca-org1",
"tlsCACerts": {
"pem": "<CERT>"
},
"httpOptions": {
"verify": false
}
}
}
}
答案 0 :(得分:1)
如果要使用基于fabric-tools
映像或类似图像的docker服务进行测试,请设置CORE_PEER_ADDRESS
,CORE_PEER_LOCALMSPID
和CORE_PEER_ID
环境变量(在其他变量之间)。
如果要使用SDK开发应用程序,请配置连接配置文件:https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/connectionprofile.html。
通常,您将自己的用户注册到客户端应用程序中。特权用户或服务会注册该用户,然后您使用提供的凭据将证书注册到您的应用中。对于基于fabric-tools
的docker服务,请配置CORE_PEER_MSPCONFIGPATH
环境变量。对于使用SDK开发的客户端应用,请将您的私钥存储在钱包(https://hyperledger-fabric.readthedocs.io/en/release-1.4/developapps/wallet.html)中。
对于GRPCS,您需要组织的TLS CA证书。 Docker客户端中的CORE_PEER_TLS_ENABLED
和CORE_PEER_TLS_ROOTCERT_FILE
变量,或基于SDK的应用中的相应连接配置文件。
答案 1 :(得分:0)
在您将用于连接网络的connection-profile.yml
文件中,只需将localhost
更改为host_ip
就可以了。