简体   繁体   English

如何在docker-compose中从一个容器连接到另一个容器?

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

I am trying to run 8 containers. 我正在尝试运行8个容器。 4 nodes and 4 abci nodes. 4个节点和4个abci节点。 This is my docker-compose file 这是我的docker-compose文件

The idea is to connect each node to its abci node. 这个想法是将每个节点连接到其abci节点。 The configuration file which is to be shared between all the nodes are in the folder named build in the directory. 所有节点之间共享的配置文件位于目录中名为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:
 .

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. 如您所见,Abci容器运行良好。 But the connection is getting refused. 但是连接被拒绝了。

For people looking for an answer, the PR https://github.com/tendermint/tendermint/pull/3195/files was merged to develop a few days ago. 对于寻求答案的人们,几天前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

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.). 基本上,除了将相关的容器定义保留在如下所示的同一网络区域外,您无需执行任何操作,也不必提供特定的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              

With the configuration, just the paired machines can access each other. 通过该配置,只有配对的机器才能相互访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在docker-compose中,如何将一个容器中的应用程序连接到另一个容器中的Postgres数据库 - In docker-compose, how do I connect an app in one container to a postgres db in another container docker-compose ssh 从一个容器到另一个容器 - docker-compose ssh from one container into another Docker-compose:如何连接到mongo容器 - Docker-compose: How to connect to mongo container 将使用 docker-compose 创建的容器连接到使用 docker run 创建的另一个容器 - Connect container created with docker-compose to another one created with docker run ConnectionException 尝试使用 ZBAEDB53E845AE71F13945FCCZ057 从另一个 docker 容器连接到 docker 中的 mongoDB - ConnectionException trying to connect to mongoDB in docker from another docker container using docker-compose 无法从 docker-compose 的另一个容器访问 api 的 docker 容器 - docker container of api not accessible from another container of docker-compose 如何从另一个 docker 容器中运行的应用程序启动 Docker-Compose 中的 docker 容器 - How do I start a docker container in Docker-Compose from an app running in another docker container 如何使用 docker-compose 而不是使用 docker bridge 从 docker 容器连接到 localhost:9092 - how to connect to localhost:9092 from docker container using docker-compose and not using docker bridge 从 docker 镜像连接到 docker-compose 容器 - Connect to docker-compose container from docker image 无法通过主机名与 docker-compose 连接另一个容器中的服务 - Failed to connect service in another container by hostname with docker-compose
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM