Hyperledger Fabric 2.1 Node SDK无法调用链码问题求助
解决Hyperledger Fabric Node SDK跨服务器连接超时问题
这问题我之前帮人排查过好多次,核心就是跨服务器连接时的域名解析、端口暴露和TLS配置没跟上,咱们一步步来解决你遇到的链码调用失败问题:
1. 先搞定域名解析的问题
看你的错误日志,SDK一直在尝试连接grpcs://peer0.org2.example.com:9051,但server-2根本不知道这个域名对应server-1的IP(192.168.43.233),自然连不上。
- 编辑server-2的hosts文件:
- Linux/macOS:打开
/etc/hosts(用sudo权限),添加下面一行:192.168.43.233 peer0.org2.example.com peer1.org2.example.com ca.org2.example.com - Windows:找到
C:\Windows\System32\drivers\etc\hosts,用管理员权限打开,添加同样的内容。
这样server-2就能把这些Fabric节点域名正确指向server-1的IP了。
- Linux/macOS:打开
2. 检查server-1上的容器端口映射和防火墙
你得确保server-1的Fabric容器已经把需要的端口暴露给外部,而且防火墙没拦着:
- 打开server-1上的docker-compose配置文件(比如
docker-compose-org2.yaml),确认peer和CA的端口映射是对的:peer0.org2.example.com: # 其他配置... ports: - "9051:9051" # gRPC endorser端口 - "9053:9053" # 事件服务端口 peer1.org2.example.com: # 其他配置... ports: - "10051:10051" - "10053:10053" ca.org2.example.com: # 其他配置... ports: - "8054:8054" - 然后检查server-1的防火墙,比如用
ufw allow 9051/tcp、ufw allow 10051/tcp、ufw allow 8054/tcp把这些端口放开,允许server-2的IP访问。
3. 补全TLS证书的正确内容
你的connection-org.json里tlsCACerts.pem都是占位符(pen file here、pemfile here),SDK没法验证peer的TLS证书,肯定会连接失败:
- 去server-1的Fabric部署目录,找到Org2的CA根证书,路径一般是
first-network/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem - 把这个证书的完整内容复制到
connection-org.json对应的pem字段里,比如:
注意证书内容要完整,不能只放占位符。"tlsCACerts": { "pem": "-----BEGIN CERTIFICATE-----\nMIIC5zCCAc+gAwIBAgIUZ...(完整证书内容,保留换行或用\\n替换)\n-----END CERTIFICATE-----" }
4. 确保peer的gRPC服务允许外部访问
如果上面几步都做了还是不行,得检查peer容器的gRPC服务是不是只绑定到了容器内部的localhost:
- 打开docker-compose文件,查看peer的环境变量,确保有
CORE_PEER_ADDRESS=0.0.0.0:9051(peer0)和CORE_PEER_ADDRESS=0.0.0.0:10051(peer1),这样peer的gRPC服务才会监听容器的所有网卡,外部服务器才能访问。 - 如果之前是
CORE_PEER_ADDRESS=localhost:9051,改成0.0.0.0:9051,然后重启peer容器:docker-compose -f docker-compose-org2.yaml restart peer0.org2.example.com peer1.org2.example.com
最后测试一下连接
做完上面的步骤,你可以在server-2上用grpcurl工具先测试连接是否正常:
grpcurl -insecure -authority peer0.org2.example.com 192.168.43.233:9051 list
如果能返回一堆gRPC服务列表,说明连接没问题,再重新用Node SDK调用链码应该就成功了。
内容的提问来源于stack exchange,提问作者Anantha Kannan
相关产品推荐
相关产品推荐

