Windows10 Docker容器运行Hyperledger Fabric byfn.sh遇脚本缺失错误求助
解决Hyperledger Fabric byfn.sh执行时'script/scripts.sh not found'错误
结合你在Windows 10 Docker容器(版本18.03.0-ce)中运行Fabric 1.1.0的byfn脚本遇到的问题,我整理了几个常见的排查方向和解决方案,你可以逐一尝试:
1. 检查容器内的目录挂载与文件存在性
Windows和Linux容器的文件系统挂载容易出现路径映射错误,导致scripts目录没有被正确加载到容器内:
- 先进入你的Fabric容器,执行
cd /path/to/your/first-network(替换为你容器内的byfn脚本所在目录),然后运行ls -la,确认scripts文件夹是否存在。 - 如果不存在,说明本地的fabric-samples目录没有正确挂载到容器。调整启动容器的
-v参数,确保本地的fabric-samples/first-network目录映射到容器内的对应路径,比如:docker run -v C:/your/local/path/fabric-samples/first-network:/first-network -it hyperledger/fabric-tools:1.1.0 bash
2. 修复脚本文件的换行符问题
Windows默认的CRLF换行符会导致Linux容器内的shell脚本执行异常,可能间接引发“文件找不到”的错误:
- 如果你是通过Git克隆的fabric-samples,先在Windows终端执行
git config --global core.autocrlf false,然后重新克隆仓库,避免Git自动转换换行符。 - 如果你已经有本地文件,用Notepad++或VS Code打开
byfn.sh和scripts/scripts.sh,将换行符转换为UNIX格式(LF):- Notepad++:编辑 -> 文档格式转换 -> 转换为UNIX格式
- VS Code:右下角点击CRLF,选择LF
3. 给脚本添加执行权限
容器内的scripts.sh可能缺少执行权限,导致byfn.sh无法调用它:
- 进入容器后,切换到first-network目录,执行:
chmod +x scripts/*.sh - 也可以在启动容器时直接设置权限,比如:
docker run -v C:/your/local/path/fabric-samples/first-network:/first-network -it hyperledger/fabric-tools:1.1.0 bash -c "chmod +x /first-network/scripts/*.sh && bash"
4. 验证版本一致性
虽然日志显示LOCAL和DOCKER版本都是1.1.0,但仍可能存在镜像或脚本版本不匹配的情况:
- 重新拉取1.1.0版本的Fabric镜像,确保所有组件版本统一:
docker pull hyperledger/fabric-peer:1.1.0 docker pull hyperledger/fabric-orderer:1.1.0 docker pull hyperledger/fabric-ca:1.1.0 docker pull hyperledger/fabric-tools:1.1.0 - 确保使用的fabric-samples是1.1.0版本,避免使用较新的samples配合旧版本镜像。
调试小技巧
如果以上方法都没解决,你可以手动执行scripts.sh来获取更详细的错误信息:
cd /first-network ./scripts/scripts.sh
根据输出的具体错误,能更精准定位问题所在。
内容的提问来源于stack exchange,提问作者Ashish Bhatia
相关产品推荐
相关产品推荐

