0

I am trying to run 8 containers. 4 nodes and 4 abci nodes. This is my docker-compose file

The idea is to connect each node to its abci node. The configuration file which is to be shared between all the nodes are in the folder named build in the directory.

version: '3'

services:
  node0:
    container_name: node0
    image: "tendermintnode"
    ports:
      - "26656-26657:26656-26657"
    environment:
      - ID=0
      - LOG=$${LOG:-tendermint.log}
    build:
      context: .
      dockerfile: abci.Dockerfile
    volumes:
      - ./build:/tendermint
    command: tendermint node --proxy_app=tcp://abci0:26658 --home "./tendermint/node0" --consensus.create_empty_blocks=false
    depends_on:
      - abci0
    networks:
      localnet:
        ipv4_address: 192.167.10.2

  node1:
   .

  node2:

  node3:
   .

  abci0:
    container_name: abci0
    image: "abcinode"
    build:
      context: .
      dockerfile: abci.Dockerfile
    command: python3 vimana/tendermint/app.py
    networks:
      localnet:
        ipv4_address: 192.167.10.6

  abci1:
   .
  abci2:
    .
  abci3:
    .
networks:
 .

It was supposed to start sending requests to each other. But instead it gives.


abci1    | INFO      ABCIServer started on port: 26658
abci0    | INFO      ABCIServer started on port: 26658
.
.
.
node0    | E[20016-01-20|19:50:10.519] Dialing failed                               module=pex addr=7ab8dbd0213ba49aaba13bb7d9396072ba4c4496@192.167.10.5:26656 err="dial tcp 192.167.10.5:26656: connect: connection refused" attempts=0
node0    | E[20016-01-20|19:50:10.657] Dialing failed                               module=pex addr=ba1ee154e395db646cc54c6fd2a9d0f8f9f98bf1@192.167.10.3:26656 err="dial tcp 192.167.10.3:26656: i/o timeout" attempts=0
.
.
.
node2    | I[20016-01-20|19:50:12.576] Started node                                 module=main nodeInfo="{ProtocolVersion:{P2P:5 Block:8 App:0} ID_:01723b064d72fdbe356911652e1f078fa3c5efd5 ListenAddr:tcp://0.0.0.0:26656 Network:chain-EFXD56 Version:0.27.3 Channels:4020212223303800 Moniker:asura Other:{TxIndex:on RPCAddress:tcp://0.0.0.0:26657}}"
node3    | E[20016-01-20|19:50:40.625] Dialing failed                               module=pex addr=7ab8dbd0213ba49aaba13bb7d9396072ba4c4496@192.167.10.5:26656 err="self ID<7ab8dbd0213ba49aaba13bb7d9396072ba4c4496>" attempts=0
node1    | E[20016-01-20|19:50:41.751] Dialing failed                               module=pex addr=ba1ee154e395db646cc54c6fd2a9d0f8f9f98bf1@192.167.10.3:26656 err="self ID<ba1ee154e395db646cc54c6fd2a9d0f8f9f98bf1>" attempts=0
node2    | E[20016-01-20|19:50:42.581] Dialing failed                               module=pex addr=01723b064d72fdbe356911652e1f078fa3c5efd5@192.167.10.4:26656 err="self ID<01723b064d72fdbe356911652e1f078fa3c5efd5>" attempts=0
node0    | E[20016-01-20|19:51:09.660] Dialing failed                               module=pex addr=753c2e8a68b459816d598b49a0db107f64777fc5@192.167.10.2:26656 err="self ID<753c2e8a68b459816d598b49a0db107f64777fc5>" attempts=0
node0    | E[20016-01-20|19:53:37.353] Error on broadcastTxCommit                   module=rpc err="Timed out waiting for tx to be included in a block"

As you can see above the abci containers are working fine. But the connection is getting refused.

Gautham Santhosh
  • 797
  • 1
  • 10
  • 21
  • 1
    Do you have the same problems with just one pair of processes? Or two? Part of constructing a [mcve] for complex setups like this should include trimming this down to the smallest example that reliably reproduces the problem. There's a lot of `docker-compose.yml` and log messages to read through as you have it now. – David Maze Jan 20 '19 at 20:13
  • 1
    You should be able to remove all of the `networks:` blocks and `container_name:` lines without fundamentally affecting your application or architecture, which also will make the example easier to read. – David Maze Jan 20 '19 at 20:14
  • is it fine now? – Gautham Santhosh Jan 20 '19 at 20:22

2 Answers2

1

For people looking for an answer, the PR https://github.com/tendermint/tendermint/pull/3195/files was merged to develop a few days ago.

  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"
    build:
      context: .
      dockerfile: abci.Dockerfile
    command: <insert command to run your abci application>
    networks:
      localnet:
        ipv4_address: 192.167.10.6

  networks:
    localnet:
      driver: bridge
      ipam:
        driver: default
        config:
        -
          subnet: 192.167.10.0/16
melekes
  • 1,880
  • 2
  • 24
  • 30
0

Basically, you have to do nothing except leaving the related container definitions in the same network zone like the following and you don't have to give a specific IP address (If you really don't need.).

version: "3"
services:
    node0:
        image: ...
        networks:
            - abci0_net
    node1:
        image: ...
        networks:
            - abci1_net

    node2:
        image: ...
        networks:
            - abci2_net

    abci0:
        image: ...
        networks:
            - abci0_net
    abci1:
        image: ...
        networks:
            - abci1_net

    abci2:
        image: ...
        networks:
            - abci2_net         

networks:
    abci0_net:
        driver: bridge
    abci1_net:
        driver: bridge
    abci2_net:
        driver: bridge              

With the configuration, just the paired machines can access each other.