结构示例中给出的应用程序未检测到 Hyperledger Fabric 测试网络的名称 1. docker-compose.yaml2.核心.yaml

问题描述

我刚刚根据 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.yamlcore.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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...