[英]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.