我在 MacOS 上的 docker 中运行 hyperledger fabric V1。我在 docker 容器中启动 composer-playground,但无法将其连接到 Fabric。产生的错误如下:
0|composer | PlaygroundAPI :createServer() > 8080
0|composer | ConnectionProfileManager :constructor() Created a new ConnectionProfileManager {"fs":{"constants":{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":64,"O_EXCL":128,"O_NOCTTY":256,"O_TRUNC":512,"O_APPEND":1024,"O_DIRECTORY":65536,"O_NOATIME":262144,"O_NOFOLLOW":131072,"O_SYNC":1052672,"O_DIRECT":16384,"O_NONBLOCK":2048,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1},"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1}}
0|composer | PlaygroundAPI :createServer() Playground API started on port 8080
0|composer | PlaygroundAPI :createServer() <
0|composer | Composer :main() >
0|composer | PlaygroundAPI :createServer() Client with ID 'xu14_MFwFdP2dVzEAAAA' on host '::ffff:172.18.0.1' connected
0|composer | ConnectorServer :constructor() > {"fs":{"constants":{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":64,"O_EXCL":128,"O_NOCTTY":256,"O_TRUNC":512,"O_APPEND":1024,"O_DIRECTORY":65536,"O_NOATIME":262144,"O_NOFOLLOW":131072,"O_SYNC":1052672,"O_DIRECT":16384,"O_NONBLOCK":2048,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1},"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1}}, {}, [object Object]
0|composer | ConnectorServer :constructor() <
0|composer | PlaygroundAPI :createServer() Client with ID 'Lg2HwkkQdPng9PlXAAAB' on host '::ffff:172.18.0.1' connected
0|composer | ConnectorServer :constructor() > {"fs":{"constants":{"O_RDONLY":0,"O_WRONLY":1,"O_RDWR":2,"S_IFMT":61440,"S_IFREG":32768,"S_IFDIR":16384,"S_IFCHR":8192,"S_IFBLK":24576,"S_IFIFO":4096,"S_IFLNK":40960,"S_IFSOCK":49152,"O_CREAT":64,"O_EXCL":128,"O_NOCTTY":256,"O_TRUNC":512,"O_APPEND":1024,"O_DIRECTORY":65536,"O_NOATIME":262144,"O_NOFOLLOW":131072,"O_SYNC":1052672,"O_DIRECT":16384,"O_NONBLOCK":2048,"S_IRWXU":448,"S_IRUSR":256,"S_IWUSR":128,"S_IXUSR":64,"S_IRWXG":56,"S_IRGRP":32,"S_IWGRP":16,"S_IXGRP":8,"S_IRWXO":7,"S_IROTH":4,"S_IWOTH":2,"S_IXOTH":1,"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1},"F_OK":0,"R_OK":4,"W_OK":2,"X_OK":1}}, {}, [object Object]
0|composer | ConnectorServer :constructor() <
0|composer | ConnectorServer :connectionManagerConnect() > hlfv1, org.acme.biznet, {"name":"hlfv1","description":"A description for a V1 Profile","type":"hlfv1","orderers":[{"url":"grpc://orderer0:7050","cert":"","hostnameOverride":""}],"channel":"mychannel","mspID":"Org1MSP","ca":"http://ca_peerOrg1:7054","peers":[{"requestURL":"grpc://peer0:7051","eventURL":"grpc://peer0:7053","cert":"","hostnameOverride":""},{"requestURL":"grpc://peer1:7056","eventURL":"grpc://peer1:7058","cert":"","hostnameOverride":""}],"keyValStore":"/home/ubuntu/.hfc-key-store","deployWaitTime":300,"invokeWaitTime":30}
0|composer | FSConnectionProfileStore :load() Failed to loaded connection profile hlfv1 {"stack":["{Error}ENOENT: no such file or directory, open '/home/composer/.composer-connection-profiles/hlfv1/connection.json' Error: ENOENT: no such file or directory, open '/home/composer/.composer-connection-profiles/hlfv1/connection.json'"," at Error (native)"]}
0|composer | FSConnectionProfileStore :save() Saved connection profile hlfv1
0|composer | ConnectionProfileManager :connect() Connecting using hlfv1 org.acme.biznet
0|composer | FSConnectionProfileStore :load() Loaded connection profile hlfv1 {
0|composer | "name": "hlfv1",
0|composer | "description": "A description for a V1 Profile",
0|composer | "type": "hlfv1",
0|composer | "orderers": [
0|composer | {
0|composer | "url": "grpc://orderer0:7050",
0|composer | "cert": "",
0|composer | "hostnameOverride": ""
0|composer | }
0|composer | ],
0|composer | "channel": "mychannel",
0|composer | "mspID": "Org1MSP",
0|composer | "ca": "http://ca_peerOrg1:7054",
0|composer | "peers": [
0|composer | {
0|composer | "requestURL": "grpc://peer0:7051",
0|composer | "eventURL": "grpc://peer0:7053",
0|composer | "cert": "",
0|composer | "hostnameOverride": ""
0|composer | },
0|composer | {
0|composer | "requestURL": "grpc://peer1:7056",
0|composer | "eventURL": "grpc://peer1:7058",
0|composer | "cert": "",
0|composer | "hostnameOverride": ""
0|composer | }
0|composer | ],
0|composer | "keyValStore": "/home/ubuntu/.hfc-key-store",
0|composer | "deployWaitTime": 300,
0|composer | "invokeWaitTime": 30
0|composer | }
.....
0|composer | Error: Connect Failed
0|composer | at ClientDuplexStream._emitStatusIfDone (/usr/local/lib/node_modules/composer-playground/node_modules/fabric-client/node_modules/grpc/src/node/src/client.js:201:19)
0|composer | at ClientDuplexStream._readsDone (/usr/local/lib/node_modules/composer-playground/node_modules/fabric-client/node_modules/grpc/src/node/src/client.js:169:8)
0|composer | at readCallback (/usr/local/lib/node_modules/composer-playground/node_modules/fabric-client/node_modules/grpc/src/node/src/client.js:229:12)
PM2 | App [composer-playground] with id [0] and pid [22], exited with code [1] via signal [SIGINT]
HLFV1 已使用 composer-sample-applications-hlfv1/packages/getting-started/scripts 中的脚本启动
Composer-playground 已推出:
docker run --network hlfv1_default --name composer-playground --publish 8080:8080 --detach hyperledger/composer-playground:latest
尝试从 composer-playground UI 使用的连接配置文件是:
{
"name": "hlfv1",
"description": "A description for a V1 Profile",
"type": "hlfv1",
"orderers": [
{
"url": "grpc://orderer0:7050",
"cert": "",
"hostnameOverride": ""
}
],
"channel": "mychannel",
"mspID": "Org1MSP",
"ca": <removed because of stackoverflow, see in the error trace>,
"peers": [
{
"requestURL": "grpc://peer0:7051",
"eventURL": "grpc://peer0:7053",
"cert": "",
"hostnameOverride": ""
},
{
"requestURL": "grpc://peer1:7056",
"eventURL": "grpc://peer1:7058",
"cert": "",
"hostnameOverride": ""
}
],
"keyValStore": "/home/ubuntu/.hfc-key-store",
"deployWaitTime": 300,
"invokeWaitTime": 30
}
用于连接的身份是 admin 及其关联的密码。
'docker ps' 给出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bbdae13a9be5 hyperledger/composer-playground:latest "pm2-docker compos..." 29 hours ago Up 31 minutes 0.0.0.0:8080->8080/tcp composer-playground
19ae93e5746c hyperledger/fabric-peer:x86_64-1.0.0-alpha "peer node start -..." 30 hours ago Up About an hour 0.0.0.0:7056->7051/tcp, 0.0.0.0:7058->7053/tcp peer1
50afdba6d769 hyperledger/fabric-peer:x86_64-1.0.0-alpha "peer node start -..." 30 hours ago Up About an hour 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0
bb7ece8cab53 hyperledger/fabric-orderer:x86_64-1.0.0-alpha "orderer" 30 hours ago Up About an hour 0.0.0.0:7050->7050/tcp orderer0
c409909e93cc hyperledger/fabric-ca:x86_64-1.0.0-alpha "sh -c 'fabric-ca-..." 30 hours ago Up About an hour 0.0.0.0:7054->7054/tcp ca_peerOrg1
S
我认为 ENOENT 是正常的,但我不明白为什么 composer-playground 实例无法连接到 Fabric。
我错过了什么?