无法组装交易,错误提案响应不成功,错误代码 500,msg 链码注册失败:容器以 0 退出
Posted
技术标签:
【中文标题】无法组装交易,错误提案响应不成功,错误代码 500,msg 链码注册失败:容器以 0 退出【英文标题】:Could not assemble transaction, err proposal response was not successful, error code 500, msg chaincode registration failed: container exited with 0 【发布时间】:2019-10-09 16:23:56 【问题描述】:我正在尝试实例化链码,但发生错误,我找不到解决方案。
ubuntu 18.04 超级账本结构 1.4.1 我已经按照文档进行了操作,上周它成功了。相同的代码在另一台计算机上运行良好。 在实例化之前,一切都进行得很顺利,包括制作通道。 我的项目中没有应用节点。
代码:
root@c442cc2748e7:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -l golang -v 1.0 -c '"Args":[]' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
2019-05-23 06:31:31.382 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-05-23 06:31:31.382 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Error: could not assemble transaction, err proposal response was not successful, error code 500, msg chaincode registration failed: container exited with 0
【问题讨论】:
一些其他信息:容器日志:[mychannel][e10540fc] 未能调用链代码名称:“lscc”,错误:容器以 0 github.com/hyperledger/fabric/core/chaincode 退出。( *RuntimeLauncher).Launch.func1 请解释答案 【参考方案1】:哦,我已经修好了! 它是由 docker compose .yaml 文件引起的。我更改了目录的名称,但没有更新此文件中的“网络”。与目录名保持一致后,现在没有错误了。
【讨论】:
您好,我遇到了同样的问题并得到了同样的错误。我更改了我的链代码的目录名称,但我不明白它与网络名称有何关系。你能再解释一下吗? @jsdtLin 应该更改哪个目录名称?请说清楚,我也遇到同样的错误。 这个我也被打动了...请解释清楚【参考方案2】:我在安装java chaincode
以使用ubuntu 18.04 设置first-network
时遇到了同样的问题
和 hyperledger fabric 1.4.1。但我已经按照以下流程解决了。
在build.gradle
我的依赖是
编译组:'org.hyperledger.fabric-chaincode-java',名称:'fabric-chaincode-shim',版本:'1.x'
我已经改成
编译组:'org.hyperledger.fabric-chaincode-java',名称:'fabric-chaincode-shim',版本:'1.4.1'
【讨论】:
【参考方案3】:我遇到了同样的问题。该问题基本上表明对等进程无法从链码映像注册/创建容器。您可以通过简单的docker ps -a
看到图像是否正在创建。此外,在实例化时,对等方会下载 fabric-ccenv
图像,其中包含用于构建链码所需的库。就我而言,正在下载 fabric-ccenv
的旧图像。正是这种差异导致链码容器以0
状态码退出。我更新了 fabric-ccenv
docker 镜像,使用了与 peer 相同的标签并解决了错误。此外,这可能发生在 CORE_PEER_CHAINCODELISTENADDRESS
设置错误的情况下。它应该设置为0.0.0.0:7052
。见解释here
【讨论】:
【参考方案4】:我已经通过简单地更改链代码的名称解决了这个问题。
root@c442cc2748e7:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer 链码 实例化 -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -l golang -v 1.0 -c '"Args":[]' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
只需将 -n mycc 更改为 -n 给你想要的任何名称
【讨论】:
这只是你做的一个锻炼。您刚刚安装了同一个链码但名称不同,现在它被视为新的链码。【参考方案5】:解决方案
删除dev-*
容器并重试。
docker images
...
dev-peer0.org1.example.com-fabcar-1.0-93f09...
...
docker rmi $(docker images dev-* -q)
说明
lscc
为链码创建一个 docker 镜像。一旦这个图像存在,它将在未来重用它。如果图像不好,您必须在再次尝试实例化之前将其删除。我相信这就是为什么这么多“重命名”解决方案起作用的原因,它会导致创建一个新图像(使用不同的名称),因为 docker 图像名称的名称和版本。
疑难解答
为了确定链码启动失败的原因,您可以连接到 cli 容器并尝试手动运行链码。例如,一个 nodejs 链码可能看起来像这样:
docker exec -it cli /bin/bash
#$ cd chaincode
#$ npm start
# <some npm error here>
另一种选择是打开对等方的登录并重试。可以通过FABRIC_LOGGING_SPEC
环境变量打开对等日志记录。我会设置为debug
或info
,然后再试一次。可以通过以下方式检查日志
docker logs peer0.org1.example.com
归根结底,错误意味着lscc
链码无法启动您的链码。
【讨论】:
以上是关于无法组装交易,错误提案响应不成功,错误代码 500,msg 链码注册失败:容器以 0 退出的主要内容,如果未能解决你的问题,请参考以下文章