Как подключиться из одного контейнера в другой в docker-compose? - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь запустить 8 контейнеров. 4 узла и 4 узла abci. Это мой docker-compose файл

Идея состоит в том, чтобы подключить каждый узел к его узлу abci. Файл конфигурации, который должен использоваться всеми узлами, находится в папке с именем build в каталоге.

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:
 .

Предполагалось начать отправку запросов друг другу. Но вместо этого это дает.


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"

Как вы можете видеть выше, контейнеры abci работают нормально. Но соединение получает отказ.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Для людей, ищущих ответ, PR https://github.com/tendermint/tendermint/pull/3195/files был объединен для разработки несколько дней назад.

  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
0 голосов
/ 21 января 2019

По сути, вам ничего не нужно делать, кроме как оставить соответствующие определения контейнеров в той же сетевой зоне, как показано ниже, и вам не нужно указывать конкретный IP-адрес (если он вам действительно не нужен).

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              

При такой конфигурации только парные машины могут получать доступ друг к другу.

...