我正在尝试运行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容器运行良好。但是连接被拒绝了。
答案 0 :(得分:1)
对于寻求答案的人,几天前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
答案 1 :(得分:0)
基本上,除了将相关的容器定义保留在如下所示的同一网络区域外,您无需执行任何操作,也不必提供特定的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
使用该配置,只有配对的机器才能相互访问。