Hyperledger Fabric安装Java链码遇内存错误及实例化失败求助
./build.sh: not found的问题 针对你遇到的这个问题,结合你提供的peer日志和操作背景,我来梳理下核心原因和对应的解决方案:
核心原因分析
从日志里的/bin/sh: 1: ./build.sh: not found可以明确看出:peer节点在尝试构建Java链码的Docker镜像时,找不到链码目录下的build.sh脚本——这个脚本是Fabric用来编译、打包Java链码的关键脚本,缺失或者路径不对都会触发这个报错。
具体解决方案
1. 确保链码目录中包含正确的build.sh脚本
Hyperledger Fabric的Java链码要求在链码根目录下存在build.sh脚本,用来执行Maven编译等构建操作。你需要:
- 在你的Java链码根目录添加这个脚本,内容可以参考Fabric官方1.4.x版本的模板:
#!/bin/bash set -e echo "Compiling Java chaincode..." mvn clean package -DskipTests - 给脚本添加执行权限:
chmod +x build.sh - 重新将链码打包(如果是用目录方式安装,确保这个脚本在你指定的安装路径根目录下)。
2. 检查链码的目录结构是否符合要求
错误的目录结构会导致peer提取链码后找不到build.sh,正确的Java链码结构应该是这样的:
java_chaincode/ ├── build.sh # 必须在根目录 ├── pom.xml # Maven项目配置文件 └── src/ └── main/ └── java/ └── com/yourorg/chaincode/ └── YourChaincodeImpl.java # 你的链码实现类
你之前执行安装命令时指定的路径github.com/hyperledger/chaincode/java/,要确保这个路径对应的目录就是上述的java_chaincode根目录,而不是嵌套的子目录。
3. 验证链码安装包的完整性
如果你是通过打包成tar.gz的方式安装链码,解压后检查是否包含build.sh脚本;如果是直接用本地目录路径安装,确认peer节点能访问到该目录下的build.sh(比如在Docker环境中,要确保目录已经正确挂载到peer容器内)。
4. 考虑Fabric版本的兼容性(针对1.4.0-rc2)
1.4.0-rc2是候选版本,可能存在一些小的兼容性问题。如果上述方案都无效,可以尝试升级到1.4.0正式版的Fabric镜像,正式版修复了候选版本中的一些已知问题,可能会解决这个构建脚本的路径识别问题。
额外验证步骤
在重新安装链码后,你可以先通过peer chaincode list --installed确认链码已经正确安装,然后再执行实例化命令,确保命令中的链码名称、版本、通道名称和你的安装信息一致(比如你安装时用的是-n java_chaincode,但实例化时用的是-n chaincode,这里要保持一致,避免不必要的错误)。
内容的提问来源于stack exchange,提问作者Bentipe

