无法从远程 docker 容器监听 docker 容器内运行的服务
Posted
技术标签:
【中文标题】无法从远程 docker 容器监听 docker 容器内运行的服务【英文标题】:Unable to listen to a service running inside a docker container from remote docker container 【发布时间】:2019-10-10 22:45:13 【问题描述】:我有两台机器:机器 A 和机器 B。两者都在不同的网络上。我使用 docker-compose.yml 在机器 A 上创建了一个 docker 容器,并在其中的端口 12345 上运行 litecoind 进程。我已将端口 12345 转发到主机机器 A 的端口 80。
version: '3'
services:
node1:
build: .
cap_add:
- ALL
command: litecoind -regtest -server -rpcuser=rpc -rpcpassword=x -rpcport=10340 --datadir=/root/litecoind-simnet/ -port=12345
networks:
vpcbr:
ipv4_address: 10.9.0.11
ports:
- 80:12345
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 10.9.0.0/16
现在在机器-B 上,我可以使用 litecoin 的 -addnode 选项直接连接到上述进程,并且可以看到区块链同步。
当我在机器 B 上创建一个容器并尝试使用机器 B 上的 docker-compose.yml 文件使用 -addnode 连接到相同的上述进程时,就会出现问题。在这种情况下,litecoind 进程仍然不可见,并且区块链不会同步。
version: '3'
services:
node1:
build: .
cap_add:
- ALL
command: litecoind -regtest -addnode=<x.x.x.x:80> -rpcuser=rpc -rpcpassword=x -rpcport=10340 --datadir=/root/litecoind-simnet/ -port=12345
networks:
vpcbr:
ipv4_address: 10.8.0.11
ports:
- 90:12345
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 10.8.0.0/16
我希望两台单独的远程机器上的上述两个单独的容器相互通信。我错过了什么?请帮忙。谢谢。
【问题讨论】:
【参考方案1】:可能的解决方案是
使用单个 docker-compose 文件将两个容器部署在同一节点上。
如果您的要求是绝对将容器部署在两个不同的节点上,那么如果您使用 compose,则需要创建一个 swarm 集群。
如果您想在同一个节点上创建两个不同的撰写文件,这是答案here
【讨论】:
感谢您的回复。我想在两台不同的远程机器上绝对部署容器,因为我试图模拟从 p2p 网络添加和删除任何节点的真实情况。使用群模式,根据我的理解,我们必须使用我尝试过并且工作正常的“覆盖”网络选项,但我想看看它是否可以使用 docker 网络的桥接网络选项。那么,不使用 swarm 有可能吗?以上是关于无法从远程 docker 容器监听 docker 容器内运行的服务的主要内容,如果未能解决你的问题,请参考以下文章
无法在 docker 容器中远程调试 Java 9 Tomcat 9