在$ GOROOT或$ GOPATH中找不到包cid

时间:2018-03-29 15:40:52

标签: docker go hyperledger-fabric hyperledger

我正在尝试自定义tuna-app示例的tuna-app链代码。我想在我的链代码中使用cid包来做出ABAC关于允许谁运行链代码的决定。当我尝试安装链码时,我收到以下错误:

Error: Error getting chaincode code chaincode: 
Error getting chaincode package bytes: Error obtaining dependencies for github.com/hyperledger/fabric/core/chaincode/lib/cid: 
<go, [list -f {{ join .Deps "\n"}} github.com/hyperledger/fabric/core/chaincode/lib/cid]>: failed with error: "exit status 1" 
cannot load package: package github.com/hyperledger/fabric/core/chaincode/lib/cid: cannot find package "github.com/hyperledger/fabric/core/chaincode/lib/cid" in any of:
/opt/go/src/github.com/hyperledger/fabric/core/chaincode/lib/cid (from $GOROOT)
/opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/lib/cid (from $GOPATH)

我使用Docker来运行peer,orderer,ca和cli容器。用于构建链代码的Docker镜像是hyperledger / fabric-ccenv。该图像是使用Dockerfile创建的;我找到的有趣的一句话是:

ADD payload/goshim.tar.bz2 $GOPATH/src/

在$ GOPATH / src文件夹中添加了tar.bz2(我相信)。 .tar.bz2文件包含chaincode使用的所有Go包。我试图插入cid包并在里面创建一个新的.tar.bz2文件。然后我重建了图像。图像现在包含cid包,但我仍然得到相同的错误。

为什么它仍然缺少包裹?

2 个答案:

答案 0 :(得分:2)

在tuna-app的startFabric.sh中,使用以下命令启动cli容器:

docker-compose -f ./docker-compose.yml up -d cli

查看compose yaml文件中持久卷的挂载声明。你应该看到这样的东西,因为金枪鱼应用程序是基于面料样品的fabcar:

./../chaincode/:/opt/gopath/src/github.com/

如果您看到此声明,请在本地计算机中将文件夹/ hyperledger / fabric / core / chaincode / lib / cid复制到您的chaincode文件夹中。如果您使用最新版本的结构样本(https://github.com/hyperledger/fabric-samples),您应该在chaincode / abac中找到它。

答案 1 :(得分:1)

我认为你不应该创建一个新的goshim.tar.bz2。如果您认为更容易确保cid位于存档中的正确路径中,例如 github.com/hyperledger/fabric/core/chaincode/lib/cid

要对此进行测试,您可以进行调试输出:

ADD payload/goshim.tar.bz2 $GOPATH/src/
RUN ls $GOPATH/src/github.com/hyperledger/fabric/core/chaincode/lib/cid

我建议在Dockerfile中下载cid:

RUN go get -d github.com/hyperledger/fabric/core/chaincode/lib/cid