无法通过 NodeJS query/invoke Hyperledger Fabric Peers(在 docker 群网络中)- GRPC/S 截止日期错误
Failed to query/invoke Hyperledger Fabric Peers(in a docker swarm network) via NodeJS - GRPC/S deadline Error
进程
我已经通过 CLI 安装、查询、调用 fabcar 链代码。一切顺利。
enrolAdmin.js 和 registerUser.js 成功。
BUT 当我 运行 query.js 我有以下错误
错误
error: [Remote.js]: Error: Failed to connect before the deadline URL:grpc://192.168.56.171:7051
error: [Remote.js]: Error: Failed to connect before the deadline URL:grpc://192.168.56.171:8051
error: [Network]: _initializeInternalChannel: Unable to initialize channel. Attempted to contact 2 Peers. Last error was Error: Failed to connect before the deadline URL:grpc://192.168.56.171:8051
Failed to evaluate transaction: Error: Unable to initialize channel. Attempted to contact 2 Peers. Last error was Error: Failed to connect before the deadline URL:grpc://192.168.56.171:8051
仅供参考 - 我已经在禁用和启用 TLS 的情况下进行了相同的测试。仍然失败
环境
在 docker swarm 的帮助下,我扩展了 Hyperledger Fabric first-network e2e 以在多个主机上工作。
连接配置文件(无 TLS)如下
{
"name": "first-network",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
"mychannel": {
"orderers": [
"orderer.example.com",
],
"peers": {
"peer0.org1.example.com": {},
"peer1.org1.example.com": {},
"peer0.org2.example.com": {},
"peer1.org2.example.com": {}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com",
"peer1.org1.example.com"
],
"certificateAuthorities": [
"ca.org1.example.com"
]
},
"Org2": {
"mspid": "Org2MSP",
"peers": [
"peer0.org2.example.com",
"peer1.org2.example.com"
],
"certificateAuthorities": [
"ca.org2.example.com"
]
}
},
"orderers": {
"orderer.example.com": {
"url": "grpc://192.168.56.170:7050"
}
},
"peers": {
"peer0.org1.example.com": {
"url": "grpc://192.168.56.171:7051"
},
"peer1.org1.example.com": {
"url": "grpc://192.168.56.171:8051"
},
"peer0.org2.example.com": {
"url": "grpc://192.168.56.172:7051"
},
"peer1.org2.example.com": {
"url": "grpc://192.168.56.172:8051"
}
},
"certificateAuthorities": {
"ca.org1.example.com": {
"url": "http://192.168.56.171:7054",
"caName": "ca.org1.example.com"
},
"ca.org2.example.com": {
"url": "http://192.168.56.172:7054",
"caName": "ca.org2.example.com"
}
}
}
docker的片段-组成文件结构如下,
networks:
hyperledger:
external:
name: hyperledger
peer0.org1.example.com:
container_name: peer0.org1.example.com
-----------------------
-----------------------
-----------------------
ports:
- 7051:7051
networks:
hyperledger:
aliases:
- peer0.org1.example.com
预期结果 - 通过 NodeJS
连接到 Hyperledger docker 群容器
我已经找到问题的解决方案。
确保 telnet 从网络外部连接到所需的容器。通过 运行
telnet 192.168.128.171 7051
如果 Telnet 不起作用 --> 问题一定是因为端口 published/exposed 不正确。
首先检查以下内容,
确保 CORE_PEER_LISTENADDRESS 设置为监听 docker-compose 文件中的所需端口。如下,
对于 peer0.org1.eaxmple.com --> 7051,
CORE_PEER_LISTENADDRESS=0.0.0.0:7051
如果 Telnet 有效 --> 检查连接配置文件。
如果启用了 TLS,请确保正确传递了 tls certificates/PEM 文件并将连接设置为 GRPCS(不是 GRPC)
连接配置文件
"certificateAuthorities": [
"ca.org1.example.com"
],
"adminPrivateKey": {
"path": "crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_sk"
},
"signedCert": {
"path": "crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
}
"peer0.org1.example.com": {
"url": "grpcs://192.168.128.171:7051",
"grpcOptions": {
"ssl-target-name-override": "peer0.org1.example.com",
"request-timeout": 120001
},
"tlsCACerts": {
"path": "crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem"
}
},
查看以下内容 link 以供进一步参考
https://fabric-sdk-node.github.io/tutorial-network-config.html
我推荐使用域。
修改 /etc/hosts
192.168.100.100 peer0.org1.example.com
192.168.100.100 peer1.org1.example.com
192.168.100.100 orderer.example.com
192.168.100.100 orderer.example.com
192.168.100.100 orderer3.example.com
192.168.100.100 orderer4.example.com
192.168.100.100 orderer5.example.com
修改连接-org1.json
"peers": {
"peer0.org1.example.com": {
"url": "grpcs://peer0.org1.example.com:7051",
"peers": {
"peer0.org1.example.com": {
"url": "grpcs://peer0.org1.example.com:7051",
修改代码
await gateway.connect(ccpPath, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: false } });
进程 我已经通过 CLI 安装、查询、调用 fabcar 链代码。一切顺利。
enrolAdmin.js 和 registerUser.js 成功。
BUT 当我 运行 query.js 我有以下错误
错误
error: [Remote.js]: Error: Failed to connect before the deadline URL:grpc://192.168.56.171:7051
error: [Remote.js]: Error: Failed to connect before the deadline URL:grpc://192.168.56.171:8051
error: [Network]: _initializeInternalChannel: Unable to initialize channel. Attempted to contact 2 Peers. Last error was Error: Failed to connect before the deadline URL:grpc://192.168.56.171:8051
Failed to evaluate transaction: Error: Unable to initialize channel. Attempted to contact 2 Peers. Last error was Error: Failed to connect before the deadline URL:grpc://192.168.56.171:8051
仅供参考 - 我已经在禁用和启用 TLS 的情况下进行了相同的测试。仍然失败
环境 在 docker swarm 的帮助下,我扩展了 Hyperledger Fabric first-network e2e 以在多个主机上工作。
连接配置文件(无 TLS)如下
{
"name": "first-network",
"version": "1.0.0",
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300"
},
"orderer": "300"
}
}
},
"channels": {
"mychannel": {
"orderers": [
"orderer.example.com",
],
"peers": {
"peer0.org1.example.com": {},
"peer1.org1.example.com": {},
"peer0.org2.example.com": {},
"peer1.org2.example.com": {}
}
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com",
"peer1.org1.example.com"
],
"certificateAuthorities": [
"ca.org1.example.com"
]
},
"Org2": {
"mspid": "Org2MSP",
"peers": [
"peer0.org2.example.com",
"peer1.org2.example.com"
],
"certificateAuthorities": [
"ca.org2.example.com"
]
}
},
"orderers": {
"orderer.example.com": {
"url": "grpc://192.168.56.170:7050"
}
},
"peers": {
"peer0.org1.example.com": {
"url": "grpc://192.168.56.171:7051"
},
"peer1.org1.example.com": {
"url": "grpc://192.168.56.171:8051"
},
"peer0.org2.example.com": {
"url": "grpc://192.168.56.172:7051"
},
"peer1.org2.example.com": {
"url": "grpc://192.168.56.172:8051"
}
},
"certificateAuthorities": {
"ca.org1.example.com": {
"url": "http://192.168.56.171:7054",
"caName": "ca.org1.example.com"
},
"ca.org2.example.com": {
"url": "http://192.168.56.172:7054",
"caName": "ca.org2.example.com"
}
}
}
docker的片段-组成文件结构如下,
networks:
hyperledger:
external:
name: hyperledger
peer0.org1.example.com:
container_name: peer0.org1.example.com
-----------------------
-----------------------
-----------------------
ports:
- 7051:7051
networks:
hyperledger:
aliases:
- peer0.org1.example.com
预期结果 - 通过 NodeJS
连接到 Hyperledger docker 群容器我已经找到问题的解决方案。 确保 telnet 从网络外部连接到所需的容器。通过 运行
telnet 192.168.128.171 7051
如果 Telnet 不起作用 --> 问题一定是因为端口 published/exposed 不正确。 首先检查以下内容,
确保 CORE_PEER_LISTENADDRESS 设置为监听 docker-compose 文件中的所需端口。如下, 对于 peer0.org1.eaxmple.com --> 7051,
CORE_PEER_LISTENADDRESS=0.0.0.0:7051
如果 Telnet 有效 --> 检查连接配置文件。 如果启用了 TLS,请确保正确传递了 tls certificates/PEM 文件并将连接设置为 GRPCS(不是 GRPC)
连接配置文件
"certificateAuthorities": [
"ca.org1.example.com"
],
"adminPrivateKey": {
"path": "crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX_sk"
},
"signedCert": {
"path": "crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
}
"peer0.org1.example.com": {
"url": "grpcs://192.168.128.171:7051",
"grpcOptions": {
"ssl-target-name-override": "peer0.org1.example.com",
"request-timeout": 120001
},
"tlsCACerts": {
"path": "crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/tlscacerts/tlsca.org1.example.com-cert.pem"
}
},
查看以下内容 link 以供进一步参考 https://fabric-sdk-node.github.io/tutorial-network-config.html
我推荐使用域。 修改 /etc/hosts
192.168.100.100 peer0.org1.example.com
192.168.100.100 peer1.org1.example.com
192.168.100.100 orderer.example.com
192.168.100.100 orderer.example.com
192.168.100.100 orderer3.example.com
192.168.100.100 orderer4.example.com
192.168.100.100 orderer5.example.com
修改连接-org1.json
"peers": {
"peer0.org1.example.com": {
"url": "grpcs://peer0.org1.example.com:7051",
"peers": {
"peer0.org1.example.com": {
"url": "grpcs://peer0.org1.example.com:7051",
修改代码
await gateway.connect(ccpPath, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: false } });