【问题标题】:Using docker to setup tendermint testnet and establishing communication between abci and tendermint core使用docker设置tendermint testnet并建立abci和tendermint core之间的通信
【发布时间】:2020-10-07 00:55:11
【问题描述】:

我正在尝试将我自己的 ABCI 应用程序与 localnet 集成。 docker-compose 看起来像

version: '3'

services:
  node0:
    container_name: node0
    image: "tendermint/localnode"
    ports:
      - "26656-26657:26656-26657"
    environment:
      - ID=0
      - LOG=${LOG:-tendermint.log}
    volumes:
      - ./build:/tendermint:Z
    command: node --proxy_app=tcp://abci0:26658
    networks:
      localnet:
        ipv4_address: 192.167.10.2

 abci0:
    container_name: abci0
    image: "abci-image"
    volumes:
      - $GOPATH/src/samplePOC:/go/src/samplePOC
    ports:
      - "26658:26658"
    build:
      context: .
      dockerfile: $GOPATH/src/samplePOC/Dockerfile
    command:  /go/src/samplePOC/samplePOC
    networks:
      localnet:
        ipv4_address: 192.167.10.6

节点和 abci- 容器均已成功构建。 ABCI 服务器已成功启动,并且节点正在尝试建立连接。但是主要问题是我看到两者无法相互交流。

我收到以下错误:

node0 |E[2019-10-29|15:14:28.525] abci.socketClient 连接失败 到 tcp://abci0:26658。正在重试...模块=abci-客户端连接=查询 err="dial tcp 192.167.10.6:26658: 连接:连接被拒绝"

有人可以帮我吗?

【问题讨论】:

    标签: docker docker-compose blockchain tendermint


    【解决方案1】:

    我的第一个想法是您可能需要将 depends_on: ["abci0"] 添加到 node0,因为 ABCI 应用程序必须在 Tendermint 尝试连接之前进行侦听。

    当然,TM 应该继续重试,所以这可能不是问题。

    您可以尝试的另一件事是在您的主机上运行tendermint,并尝试连接到abci0 (26658) 上的 ABCI 端口的暴露端口,以将问题隔离到 docker 配置。

    如果您无法运行 tendermint node --proxy_app=tcp://localhost:26658,则问题可能出在您的 ABCI 应用程序中。

    我假设你已经在你挂载到node0的卷中初始化了一个目录?

    【讨论】:

    • 首先,谢谢您的回复。当我只使用本地主机时,tendermint 和 abci 相互连接。只有 docker 有问题在 docker-compose.yml 文件中更改 tendermint node --proxy_app=tcp://localhost:26658 时,我仍然得到相同的输出。我不太明白你关于为node0 初始化卷中目录的最后一个问题。能否请您进一步详细说明?
    • 当我尝试在本地主机上运行tendermint,并尝试连接到docker容器内abci(26658)上的ABCI端口的暴露端口时,我仍然收到连接被拒绝错误。跨度>
    • 回复。初始化一个目录,我的意思是你设置了一个 Tendermint 主目录(使用tendermint init)。我假设当您在本地运行所有内容(没有 docker 或 docker-compose)时,您在 ~/.tendermint 有一个包含您的配置的文件夹。 dockerized Tendermint node0 也需要配置。我不熟悉您使用的 TM 图像,因此您可能不需要。
    • 您可以尝试使用您的 dockerfile,但从每个服务中删除 networks: 部分吗?这将强制 docker-compose 创建一个默认网络。
    • 我为我的 abci 应用程序编写了一个 docker 文件,当我运行 docker build . 时运行良好,但在 docker-compose 上运行不正常。另外,我还没有单独对招标节点进行 dockerized。知道你会怎么做吗?目前,我只使用从docker-compose.yml 文件生成的tendermint/localnode 图像。
    【解决方案2】:

    我通过 Tendermint 的 kvstore example 得到了这个。

    version: "3.4"
    
    services:
      kvstore-app:
        image: alpine
        expose:
          - "26658"
        volumes:
          - ./kvstore-example:/home/dev/kvstore-example
        command: "/home/dev/kvstore-example --socket-addr tcp://kvstore-app:26658"
      tendermint-node:
        image: tendermint/tendermint
        depends_on: 
          - kvstore-app
        ports:
          - "26657:26657"
        environment:
          - TMHOME=/tmp/tendermint
        volumes:
          - ./tmp/tendermint:/tmp/tendermint
        command: node --proxy_app=tcp://kvstore-app:26658
    

    我不确定为什么您的docker-compose.yml 不起作用,但很可能您没有以节点可访问的方式绑定 abci 应用程序的套接字。我用参数--socket-addr tcp://kvstore-app:26658" 明确告诉abci 应用程序这样做。此外,我只是在 docker 网络上公开 abci 应用程序的端口,但我认为映射端口应该隐式执行此操作。

    我也会摆脱所有网络的东西。就我个人而言,我只有在心中有一些非常具体的网络目标时才会使用网络配置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2018-07-31
      • 2019-05-06
      相关资源
      最近更新 更多