问题描述
我刚刚根据 documentation 从 Hyperledger Fabric 存储库重新安装了 Fabric Samples v2.2.0。
但是,当我尝试通过运行 asset-transfer-basic
来运行位于 fabric-samples/asset-transfer-basic/application-javascript
目录中的 node app.js
应用程序时,会创建钱包并注册管理员和用户。但随后它尝试调用 app.js
中给出的函数并显示此错误
error: [Transaction]: Error: No valid responses from any peers. Errors:
peer=peer0.org1.example.com:7051,status=500,message=error in simulation: Failed to execute transaction
aa705c10403cb65cecbd360c13337d03aac97a8f233a466975773586fe1086f6: Could not launch chaincode basic_1.0:b359a077730d7
f44d6a437ad49d1da951f6a01c6d1eed4f85b8b1f5a08617fe7: error starting container: error starting container:
API error (404): network _test not found
Response of a transaction to invoke a function
此错误以前从未发生过。但不知何故,在重新安装 docker 和 Hyperledger Fabric fabric-samples
后,它似乎从未找到网络 _test
。
注意: 重新安装之前的网络名称是net_test
。但是现在当我尝试 docker network ls
时,它显示了一个名为 docker_test
的网络。我使用的是适用于 Linux 的 Windows 子系统 (WSL) 版本 1。
NETWORK ID NAME DRIVER ScopE
b7ac05456f46 bridge bridge local
acaa5856b871 docker_test bridge local
866f58b9078d host host local
4812f94efb15 none null local
如何解决在我尝试运行应用程序时出现的问题?
解决方法
在我看来,CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE
设置似乎是错误的。
您可以检查 docker-compose.yaml
或 core.yaml
1. docker-compose.yaml
- 我将根据您当前的情况将fabric-samples/test-network 解释为定位。
- 您可以在 docker-compose.yaml 中签入
CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE
- 也许在您的情况 (fabric-samples/test-network) 中,
${COMPOSE_PROJECT_NAME}
的值设置不正确,因此设置为_test
。 - 确保该值设置正确并将其更改为您的网络名称。
# hyperledger/fabric-samples/test-network/docker/docker-compose-test-net.yaml
# based v2.2
...
peer0.org1.example.com:
container_name: peer0.org1.example.com
image: hyperledger/fabric-peer:2.2
environment:
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
# - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_test
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=docker_test
...
2.核心.yaml
如果在docker-compose.yaml
peer 中没有设置该值,则需要查看peer引用的core.yaml
。
您可以在 networkMode
中找到 core.yaml
参数
# core.yaml
...
vm:
docker:
hostConfig:
# NetworkMode: host
NetworkMode: docker_test
...
如果两者均未设置,则将其设置为默认值。但是,当您看到 _test
被记录时,在两个部分之一中设置了错误的值,您需要将该值更正为您想要的值。
此问题与 docker 网络有关。完成@nezuko-response。
在您的 docker-compose 文件所在的同一目录中创建一个文件并将其命名为 ".env"。
在其中添加以下行:
COMPOSE_PROJECT_NAME=net
使用 docker-compose up
使用新配置更新容器。
或者关闭 HL 网络 (./network.sh down
) 和打开 (./network.sh up
),重新启动测试网络。
否则,即使在创建 ".env" 文件后,您仍然会遇到相同的错误。
关于docker networking的更多解释
,我从某人那里复制了这个。这个对我有用!!
请在您的 docker-compose 文件所在的同一目录中创建一个名为“.env”的文件。在“.env”文件中添加以下行:-
COMPOSE_PROJECT_NAME=net