docker-compose启动Hyperledger Fabric网络orderer命令找不到报错
问题根因
orderer启动报错的核心原因是容器镜像配置错误:你为orderer服务指定的镜像是hyperledger/fabric-peer:latest,该镜像仅内置peer节点相关可执行文件,不包含orderer二进制程序,因此容器启动执行orderer命令时会触发“executable file not found in $PATH”报错。
注意:你在宿主机配置的PATH、FABRIC_CFG_PATH等环境变量仅对宿主机生效,不会同步到容器内部,容器内的运行文件、环境完全由指定的镜像决定,和宿主机的环境变量配置无关。
同文件内peer节点能正常启动,是因为peer服务本身就使用hyperledger/fabric-peer镜像,镜像自带peer可执行文件,匹配启动命令peer node start的要求,自然不会出现二进制找不到的问题。
修复方案
按以下步骤修改docker-compose配置即可解决:
- 替换orderer服务的镜像为官方orderer专用镜像,修改orderer配置段的
image字段:
生产环境建议不要使用image: hyperledger/fabric-orderer:latestlatest标签,替换为和你现有Fabric组件一致的明确版本号(如2.5.6),避免版本不兼容导致的异常 - 修正创世块路径不匹配问题:你在环境变量中配置的创世块路径为
/var/hyperledger/orderer/orderer-genesis.block,但volume挂载时将宿主机创世块文件映射到了容器内的/var/hyperledger/orderer/orderer-supply-genesis.block路径,二者不一致会导致后续启动报找不到创世块,二选一统一即可:- 方案1:将环境变量
ORDERER_GENERAL_BOOTSTRAPFILE的值改为/var/hyperledger/orderer/orderer-supply-genesis.block - 方案2:修改volume挂载的容器内路径,和环境变量中配置的路径保持一致
- 方案1:将环境变量
- 清理command字段的无效内容:当前配置中
command: orderer //notworking后面的//notworking是无效注释,YAML语法要求注释必须以#开头单独写,这部分内容会被当成启动参数传给orderer进程导致参数错误,直接删掉,保留command: orderer即可。 - 配置修改完成后,重新执行启动命令拉起orderer服务:
docker-compose -f docker-compose.yaml up -d orderer.supplychain.com
内容的提问来源于stack exchange,提问作者Nassreddine MEKKI
相关产品推荐
相关产品推荐

