如何公开 mininet容器网主机端口以在 localhost 上启动应用程序?

问题描述

下面是我试图用 mininet(containernet) 创建的拓扑,其中有 3 个容器,中间有一个第 2 层交换机。我想在浏览器的本地主机上访问这些容器(例如 kali linux 容器)。我尝试像文档中所说的那样公开端口,但仍然无法在浏览器上访问它。 注意 - 如果我不在本地主机上使用 containernet,我可以访问容器(例如 kali linux conatiner)。 作为参考,第三台主机使用以下 docker 容器 - https://hub.docker.com/r/lukaszlach/kali-desktop

#!/usr/bin/python

from mininet.net import Containernet
from mininet.node import Controller
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import info,setLogLevel
#VNC_DEFAULT = 5900
#WEB_DEFAULT = 6080
setLogLevel('info')

net = Containernet(controller=Controller)
info('*** Adding controller\n')
net.addController('c0' )
info('*** Adding docker containers\n')
d1 = net.addDocker('d1',ip='10.0.2.16',dimage="virtualmogli_v1_service1",ports=[5000],port_bindings={5000:5000},publish_all_ports=True)
d2 = net.addDocker('d2',ip='10.0.2.15',dimage="virtualmogli_v1_service2",ports=[5001],port_bindings={5001:5001},publish_all_ports=True)
d3 = net.addDocker('d3',ip='10.0.2.17',dimage="virtualmogli_v1_kalicontainer",ports=[5900,6080],port_bindings={5900: 5900,6080: 6080},publish_all_ports=True,)
info('*** Adding switches\n')
s1 = net.addSwitch('s1')
#s2 = net.addSwitch('s2')
info('*** Creating links\n')
net.addLink(d1,s1,cls=TCLink,delay='100ms',bw=1)
#net.addLink(s1,s2,bw=1)
net.addLink(s1,d2,d3,bw=1)
info('*** Starting network\n')
net.start()
info('*** Testing connectivity\n')
net.ping([d1,d3])
info('*** Running CLI\n')
CLI(net)
info('*** Stopping network')
net.stop()

解决方法

缺少的部分是我们需要将 dcmd="/init" 添加到我们的容器网络拓扑中,而不是我们的基类。

对于上述问题,以下代码将起作用- d2 = net.addDocker('d2',ip='10.0.2.15',dimage="lukaszlach/kali-desktop:xfce-top10",ports=[5900,6080],dcmd="/init,port_bindings={5900:5900,6080:6080},publish_all_ports= True,environment={"USER": "kali","PASSWORD": "kali","ROOT_PASSWORD": "root"})