Fabric 找不到配置文件时该看什么

目录

刚开始跑 Fabric 测试网络时,看到找不到配置文件,很容易新建一个 config 目录,再放一个空的 configtx.yaml。这通常没有用,还会把问题弄得更乱。

FABRIC_CFG_PATH 指向的是目录,不是某个 yaml 文件。更重要的是,目录里该放什么,取决于当前报错的是哪个程序。peer CLI 和 peer 节点读取 core.yamlconfigtxgen 在生成通道配置和区块时读取 configtx.yaml。先看日志里的命令名,再设路径,就不会把两个文件混在一起。

运行 test-network

fabric-samples/test-network 目录里运行脚本。下面的命令会清理旧容器,启动网络并创建默认通道。

cd fabric-samples/test-network
./network.sh down
./network.sh up createChannel

部署 Go 版本的示例链码时,可以这样写。

./network.sh deployCC \
  -ccn basic \
  -ccp ../asset-transfer-basic/chaincode-go \
  -ccl go

网络用完后执行 ./network.sh down。如果想把启动和建通道拆开,./network.sh up 只启动 peer 和 orderer,随后再执行 ./network.sh createChannel。不同版本的 samples 参数会有差别,遇到不确定的命令时先看 ./network.sh -h

peer 找不到 core.yaml

日志里出现 peercore.yaml 时,FABRIC_CFG_PATH 应指向包含 core.yaml 的目录。以常见的 fabric-samples 目录结构为例,在 test-network 里可以这样设。

export FABRIC_CFG_PATH="${PWD}/../config"
test -f "${FABRIC_CFG_PATH}/core.yaml" && echo "core.yaml 已找到"

变量的值不要写成 .../config/core.yaml,因为它接收的是目录。也不要为了让报错消失而新建空的 core.yaml。peer CLI 需要其中的运行配置,空文件并不能让网络正常工作。

configtxgen 找不到 configtx.yaml

如果报错来自 configtxgen,缺的是通道配置。标准测试网络里的文件通常在 fabric-samples/test-network/configtx/configtx.yaml。从 test-network 手动调用 configtxgen 时,可以把路径设为:

export FABRIC_CFG_PATH="${PWD}/configtx"
test -f "${FABRIC_CFG_PATH}/configtx.yaml" && echo "configtx.yaml 已找到"

例如,下面的命令只用来确认配置能被读取。profile 和输出文件要按自己的网络版本决定。

configtxgen -printOrg Org1MSP > /tmp/org1.json

如果只是在跑官方 test-network,交给 ./network.sh up createChannel 管理通道创建会省事得多。它会使用 sample 自带的 configtx/configtx.yaml。只有脱离脚本手动生成通道配置时,才需要直接调用 configtxgen

还有一个常见原因是工作目录不对。network.sh 会引用 Docker Compose 文件、证书和其他相对路径文件。不要在别的目录里用一长串路径调用它,进入 fabric-samples/test-network 再运行。路径仍有疑问时,用下面两行确认实际指向的目录和文件。

echo "$FABRIC_CFG_PATH"
ls -la "$FABRIC_CFG_PATH"

参考资料

发布于 2023 年 4 月 15 日
评论