dockerdocker-composetendermint

How to connect from one container to another in docker-compose?


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.


Solution

  • 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