Closed ZoomQuiet closed 1 year ago
尝试对已经下载的 镜像 进行别名: $ docker images | grep ccenv
busan15/fabric-ccenv 2.1 bb0ff0bcb00f 2 years ago 542MB
hyperledger/fabric-ccenv 2.1 bb0ff0bcb00f 2 years ago 542MB
hyperledger/fabric-ccenv arm64-2.1 bb0ff0bcb00f 2 years ago 542MB
依然是相同问题:
$ peer lifecycle chaincode install basic.tar.gz Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image build failed: docker build failed: Failed to pull hyperledger/fabric-ccenv:2.1: no matching manifest for linux/arm64/v8 in the manifest list entries
这种加载编译容器的行为是在哪儿可以配置的?
SEE:
才反应过来:
是得在 docker-compose.yaml
中对应 peer 容器定义的 environment:
中追加
- CORE_CHAINCODE_BUILDER=busan15/fabric-ccenv:arm64-2.1
现在就可以进入指定容器展开编译了:
$ peer lifecycle chaincode install basic.tar.gz
Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image build failed: docker build failed: Error returned from build: 2 "google.golang.org/protobuf/internal/flags
google.golang.org/protobuf/internal/set
golang.org/x/sys/internal/unsafeheader
google.golang.org/grpc/attributes
google.golang.org/protobuf/internal/detrand
google.golang.org/protobuf/internal/pragma
google.golang.org/protobuf/internal/version
golang.org/x/net/internal/timeseries
google.golang.org/protobuf/internal/errors
google.golang.org/grpc/backoff
google.golang.org/protobuf/encoding/protowire
golang.org/x/sys/unix
google.golang.org/grpc/internal/grpclog
golang.org/x/net/trace
google.golang.org/grpc/grpclog
google.golang.org/protobuf/reflect/protoreflect
google.golang.org/grpc/connectivity
google.golang.org/grpc/internal/credentials
google.golang.org/grpc/serviceconfig
google.golang.org/grpc/metadata
google.golang.org/protobuf/internal/encoding/messageset
google.golang.org/protobuf/internal/strs
google.golang.org/protobuf/internal/genid
google.golang.org/protobuf/internal/order
google.golang.org/protobuf/reflect/protoregistry
google.golang.org/protobuf/internal/encoding/text
google.golang.org/protobuf/runtime/protoiface
google.golang.org/protobuf/internal/descfmt
google.golang.org/protobuf/proto
google.golang.org/protobuf/internal/encoding/defval
google.golang.org/protobuf/internal/descopts
google.golang.org/protobuf/internal/encoding/json
google.golang.org/grpc/internal/grpcrand
google.golang.org/grpc/codes
google.golang.org/grpc/encoding
google.golang.org/grpc/internal/backoff
google.golang.org/grpc/internal/balancerload
google.golang.org/grpc/internal/grpcutil
google.golang.org/grpc/internal/buffer
google.golang.org/grpc/internal/grpcsync
google.golang.org/grpc/internal/envconfig
google.golang.org/protobuf/encoding/prototext
google.golang.org/protobuf/internal/filedesc
golang.org/x/text/transform
golang.org/x/text/unicode/bidi
golang.org/x/text/unicode/norm
golang.org/x/net/http2/hpack
google.golang.org/grpc/internal/syscall
golang.org/x/text/secure/bidirule
google.golang.org/grpc/keepalive
google.golang.org/grpc/stats
google.golang.org/grpc/tap
github.com/hyperledger/fabric-contract-api-go/contractapi/utils
google.golang.org/protobuf/internal/encoding/tag
google.golang.org/protobuf/encoding/protojson
github.com/mailru/easyjson/jlexer
golang.org/x/net/idna
google.golang.org/protobuf/internal/impl
github.com/mailru/easyjson/buffer
github.com/mailru/easyjson/jwriter
gopkg.in/yaml.v2
golang.org/x/net/http/httpguts
github.com/PuerkitoBio/urlesc
golang.org/x/net/http2
golang.org/x/text/width
github.com/PuerkitoBio/purell
# golang.org/x/net/http2
vendor/golang.org/x/net/http2/transport.go:416:45: undefined: os.ErrDeadlineExceeded
github.com/xeipuuv/gojsonpointer
github.com/xeipuuv/gojsonreference
github.com/joho/godotenv
github.com/xeipuuv/gojsonschema
github.com/rogpeppe/go-internal/semver
github.com/rogpeppe/go-internal/module
github.com/rogpeppe/go-internal/modfile
github.com/gobuffalo/envy
github.com/go-openapi/swag
github.com/gobuffalo/packd/internal/takeon/github.com/markbates/errx
github.com/gobuffalo/packd
github.com/gobuffalo/packr
github.com/go-openapi/jsonpointer
github.com/go-openapi/jsonreference
github.com/go-openapi/spec
github.com/hyperledger/fabric-contract-api-go/internal/utils
google.golang.org/protobuf/internal/filetype
google.golang.org/protobuf/runtime/protoimpl
google.golang.org/protobuf/types/descriptorpb
google.golang.org/protobuf/types/known/timestamppb
google.golang.org/protobuf/types/known/emptypb
google.golang.org/protobuf/types/known/anypb
github.com/golang/protobuf/ptypes/timestamp
github.com/golang/protobuf/ptypes/empty
github.com/golang/protobuf/ptypes/any
google.golang.org/protobuf/types/known/durationpb
google.golang.org/genproto/googleapis/rpc/status
github.com/hyperledger/fabric-contract-api-go/internal/types
github.com/golang/protobuf/ptypes/duration
github.com/hyperledger/fabric-contract-api-go/metadata
google.golang.org/protobuf/reflect/protodesc
github.com/hyperledger/fabric-contract-api-go/serializer
github.com/hyperledger/fabric-contract-api-go/internal
github.com/golang/protobuf/proto
github.com/hyperledger/fabric-protos-go/ledger/rwset
github.com/golang/protobuf/jsonpb
google.golang.org/grpc/credentials
github.com/hyperledger/fabric-protos-go/msp
google.golang.org/grpc/encoding/proto
github.com/golang/protobuf/ptypes
google.golang.org/grpc/internal/channelz
github.com/hyperledger/fabric-chaincode-go/pkg/attrmgr
github.com/hyperledger/fabric-protos-go/common
github.com/hyperledger/fabric-chaincode-go/pkg/cid
google.golang.org/grpc/channelz
google.golang.org/grpc/internal/pretty
google.golang.org/grpc/credentials/insecure
google.golang.org/grpc/binarylog/grpc_binarylog_v1
google.golang.org/grpc/internal/status
google.golang.org/grpc/resolver
google.golang.org/grpc/status
google.golang.org/grpc/peer
google.golang.org/grpc/internal
google.golang.org/grpc/internal/binarylog
google.golang.org/grpc/balancer
google.golang.org/grpc/internal/metadata
google.golang.org/grpc/balancer/grpclb/state
google.golang.org/grpc/internal/resolver/passthrough
google.golang.org/grpc/balancer/base
google.golang.org/grpc/internal/serviceconfig
google.golang.org/grpc/internal/resolver/dns
google.golang.org/grpc/balancer/roundrobin
google.golang.org/grpc/internal/balancer/gracefulswitch
google.golang.org/grpc/internal/transport/networktype
google.golang.org/grpc/internal/resolver
github.com/hyperledger/fabric-protos-go/ledger/queryresult
google.golang.org/grpc/internal/resolver/unix
"
不过, 有常规无法访问的问题, 应该如何在进入容器后先设定一些环境变量, 来使用国内代理呢?
在打包前的链码目录中生成 vendor 文件夹,应该可以不设置代理直接访问
在打包前的链码目录中生成 vendor 文件夹,应该可以不设置代理直接访问
@wefantasy 多谢提醒, 之前注意到这种差异,
通过:
GO111MODULE=on go mod vendor go mod tidy
已经重建了 vendor 目录, 尝试解开打包的代码也观察到所有依赖:
$ cat metadata.json {"path":"github.com/hyperledger/k8s2hlf/FabricLearn/2_FabricNetworkUpdate/asset-transfer-basic/chaincode-go","type":"golang","label":"basic_1"}
@ZoomQuiet 是的,之后所有链码都建议如此打包
@wefantasy 多谢确认, 不过, 这样形成的 .tar.gz chaincode 包, 无法成功安装到 peer 哪... 这种情况应该怎么想呢?
从官方 fabric-samples 中, 对应分支里复制出 fabcar 代码, 找到对应指令, 尝试安装 java 版本的 $peer lifecycle chaincode package fabcar.tar.gz --path asset-transfer-basic/fabcar/java/build/install/fabcar/ --lang java --label fabcar_1
$peer lifecycle chaincode install fabcar.tar.gz Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image build failed: docker build failed: Error returned from build: 1 "standard_init_linux.go:228: exec user process caused: exec format error "
也类似500错误...
@ZoomQuiet 似乎还是因为不同架构、平台导致的兼容问题,链码和流程应该是没问题的
background
2_FabricNetworkUpdate 案例中 fabric-contract-api-go v1.1.1 加载失败
goal
先在 arm64 环境中, 可以完整跑完一个基本的 HLF 案例,
error
因为不知道哪一步可能出错, 所以, 手工逐一执行 4_TestChaincode.sh 中的指令
第一步就出错: $ peer lifecycle chaincode install basic.tar.gz
Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image build failed: docker build failed: Failed to pull hyperledger/fabric-ccenv:2.1: no matching manifest for linux/arm64/v8 in the manifest list entries
guess
对应
core.yaml
中有关版本的配置使用的是:$(TWO_DIGIT_VERSION)
但是, 其它 .yam 中使用的是${DOCKER_CA_PATH}
前者 在 bash 中无法用 echo 指令打印出内容, 后者可以...
也许是这个问题?