多组织环境下Hyperledger Composer REST Server Peer连接失败问题
Hyperledger Composer REST Server 多组织环境下无法连接Peer的问题排查与解决
我来帮你梳理下这个问题的排查方向和可能的解决方案,你遇到的No peers available to query错误通常是REST Server无法和Peer节点建立网络连接,或者使用的卡片配置有问题导致的。
你的问题场景与关键信息
你在Hyperledger Composer多组织部署环境中,尝试搭建集成Google OAuth2.0的持久化REST Server,遵循官方教程配置后,执行Docker启动命令时出现连接失败,容器日志报错:
Error trying to ping. Error: No peers available to query. last error was Error: 14 UNAVAILABLE: Connect Failed
你使用的启动命令:
docker run -d -e COMPOSER_CARD=${COMPOSER_CARD} -e COMPOSER_NAMESPACES=${COMPOSER_NAMESPACES} -e COMPOSER_AUTHENTICATION=${COMPOSER_AUTHENTICATION} -e COMPOSER_MULTIUSER=${COMPOSER_MULTIUSER} -e COMPOSER_PROVIDERS="${COMPOSER_PROVIDERS}" -e COMPOSER_DATASOURCES="${COMPOSER_DATASOURCES}" -v ~/.composer:/home/composer/.composer --name rest --network composer_default -p 3001:3001 org1/composer-rest-server
容器核心日志片段:
[2018-05-13 02:38:15] PM2 log: Launching in no daemon mode [2018-05-13 02:38:16] PM2 log: Starting execution sequence in -fork mode- for app name:composer-rest-server id:0 [2018-05-13 02:38:16] PM2 log: App name:composer-rest-server id:0 online WARNING: NODE_APP_INSTANCE value of '0' did not match any instance config file names. WARNING: See https://github.com/lorenwest/node-config/wiki/Strict-Mode Discovering types from business network definition ... Connection fails: Error: Error trying to ping. Error: No peers available to query. last error was Error: 14 UNAVAILABLE: Connect Failed It will be retried for the next request. Exception: Error: Error trying to ping. Error: No peers available to query. last error was Error: 14 UNAVAILABLE: Connect Failed Error: Error trying to ping. Error: No peers available to query. last error was Error: 14 UNAVAILABLE: Connect Failed at _checkRuntimeVersions.then.catch (/home/composer/.npm-global/lib/node_modules/composer-rest-server/node_modules/composer-connector-hlfv1/lib/hlfconnection.js:790:34) at <anonymous> [2018-05-13 02:38:29] PM2 log: App [composer-rest-server] with id [0] and pid [14], exited with code [1] via signal [SIGINT]
当前运行的Docker容器列表:
233938f12ef0 org1/composer-rest-server "pm2-docker composer…" 30 minutes ago Up 30 minutes 3000/tcp, 0.0.0.0:3001->3001/tcp rest 6285853fdceb dev-peer1.org1.example.com-emcs-0.0.3-b1bb3a7f1090c0d1cabf10340188aa72e329e1266595f63d232d9cc38a0ed8b8 "/bin/sh -c 'cd /usr…" About an hour ago Up About an hour dev-peer1.org1.example.com-emcs-0.0.3 1a4f7680cac9 dev-peer0.org1.example.com-emcs-0.0.3-094e3600469176994df7048ec5afad4114ce5203fe267b0c45da52a3d3b9e0b7 "/bin/sh -c 'cd /usr…" About an hour ago Up About an hour dev-peer0.org1.example.com-emcs-0.0.3 b7c7364c88bd dev-peer0.org2.example.com-emcs-0.0.3-3f76658cf8352417e15be589ed41aa0fa81e702a1bdb6e7e1ce898a015fdd34c "/bin/sh -c 'cd /usr…" About an hour ago Up About an hour dev-peer0.org2.example.com-emcs-0.0.3 b154cd4f50bd dev-peer1.org2.example.com-emcs-0.0.3-340eb1dbb0152185d068724d637848c882bd3754f7c9888d57c80bdfb6530774 "/bin/sh -c 'cd /usr…" About an hour ago Up About an hour dev-peer1.org2.example.com-emcs-0.0.3 f9d2a72fde40 dev-peer1.org2.example.com-mycc-1.0-26c2ef32838554aac4f7ad6f100aca865e87959c9a126e86d764c8d01f8346ab "chaincode -peer.add…" 2 hours ago Up 2 hours dev-peer1.org2.example.com-mycc-1.0 d812bef3a1bd dev-peer0.org1.example.com-mycc-1.0-384f11f484b9302df90b453200cfb25174305fce8f53f4e94d45ee3b6cab0ce9 "chaincode -peer.add…" 2 hours ago Up 2 hours dev-peer0.org1.example.com-mycc-1.0 ccb70e752d7b dev-peer0.org2.example.com-mycc-1.0-15b571b3ce849066b7ec74497da3b27e54e0df1345daff3951b94245ce09c42b "chaincode -peer.add…" 2 hours ago Up 2 hours dev-peer0.org2.example.com-mycc-1.0 6989f8850296 hyperledger/fabric-tools "/bin/bash -c './scr…" 2 hours ago Up 2 hours cli 0eabbd6be684 hyperledger/fabric-peer "peer node start" 2 hours ago Up 2 hours 0.0.0.0:10051->7051/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com d8c1146a5989 hyperledger/fabric-peer "peer node start" 2 hours ago Up 2 hours 0.0.0.0:8051->7051/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com 142aeb4525ab hyperledger/fabric-peer "peer node start" 2 hours ago Up 2 hours 0.0.0.0:9051->7051/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com 70ef571ea1ba hyperledger/fabric-peer "peer node start" 2 hours ago Up 2 hours 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com 31c8417beae2 hyperledger/fabric-ca "sh -c 'fabric-ca-se…" 2 hours ago Up 2 hours 0.0.0.0:8054->7054/tcp ca_peerOrg2 ade3061fc517 hyperledger/fabric-orderer "orderer" 2 hours ago Up 2 hours 0.0.0.0
排查与解决方案
1. 优先验证COMPOSER_CARD的有效性
这是最常见的问题根源:
- 先在本地执行
composer network ping -c ${COMPOSER_CARD},确认这个卡片能正常连接到Peer节点。如果本地都ping不通,容器里肯定也无法连接。 - 多组织环境下,你使用的是
org1/composer-rest-server镜像,所以卡片必须是org1的有效卡片,包含org1 Peer的正确地址、证书和私钥,不能用org2的卡片。 - 检查卡片中的Peer地址:在Docker网络内部,必须使用容器的主机名+内部端口(比如
grpcs://peer0.org1.example.com:7051),而不是宿主机的IP+映射端口(比如grpcs://localhost:7051),因为容器内的localhost指向自身,不是宿主机。
2. 检查Docker网络的连通性
- 确认Peer节点和REST Server容器在同一个Docker网络中:执行
docker inspect peer0.org1.example.com | grep -A5 Networks,看Peer是否加入了composer_default网络(你的REST Server用的是这个网络)。 - 如果Peer不在这个网络,需要把REST Server容器加入到Peer所在的网络,或者调整Peer的网络配置。
- 手动测试容器内的Peer连通性:进入REST Server容器
docker exec -it rest bash,然后执行ping peer0.org1.example.com,如果ping不通,说明网络DNS解析有问题,需要检查Docker网络的配置。
3. 验证证书挂载与权限
- 确认
~/.composer目录正确挂载到容器的/home/composer/.composer:进入容器后执行ls /home/composer/.composer/cards,看是否存在你指定的卡片文件。 - 检查卡片对应的证书文件是否有权限访问,确保容器内的
composer用户能读取这些文件(通常挂载目录的权限会自动继承,但若有特殊权限配置可能出问题)。
4. 排除OAuth2配置干扰
有时候OAuth2的配置错误会导致REST Server初始化失败,进而影响Peer连接:
- 暂时去掉OAuth2相关的环境变量(
COMPOSER_AUTHENTICATION、COMPOSER_MULTIUSER、COMPOSER_PROVIDERS),启动一个不带认证的REST Server,看是否能正常连接Peer。 - 如果不带认证能正常运行,再逐步添加OAuth2的配置,排查是否是JSON格式错误或者参数配置不当导致的问题。
5. 检查Peer节点的状态
虽然容器列表显示Peer都是Up状态,但可以进入CLI容器验证Peer的可用性:
- 进入CLI容器
docker exec -it cli bash,然后执行peer channel list,看Peer是否已经加入了对应的业务网络通道,并且能正常和Orderer通信。
内容的提问来源于stack exchange,提问作者sunny_inw
相关产品推荐
相关产品推荐

