我创建了一个带有驱动程序的网络: ipvlan和几个带有特定网关的子网。(约20人)
现在我想要创建带有特定IP的容器,以便它们只分配给ipvlan网络的正确子网!
dockernetwork = client.networks.get('ipvlan172')
print "create container with ip "+targetIP
client.containers.run('myalpine',auto_remove=True,command='ping 192.168.11.11',detach=True,name=targetName)
dockernetwork.connect(container,ipv4_address=targetIP)
container.start()这里发生的是,client.containers.run为容器提供了码头桥网络的ip和通往码头桥的默认网关。然后,dockernetwork.connect为容器的接口提供第二个ip (目标ip)。
如果我将参数network='ipvlan172‘添加到命令中:
client.containers.run('myalpine',network='ipvlan172',auto_remove=True,command='ping 192.168.11.11',detach=True,name=targetName)创建的容器没有获得我想要的坞桥网络的ip,而是,但是命令的targetIP
dockernetwork.connect(container,ipv4_address=targetIP)都会被忽视。以便所创建的容器具有ipvlan网络的随机子网的IP
解决这一问题的一种方法是创建一个脚本,该脚本将在容器启动后执行,并删除dockerhost ip并更改默认网关。
还有其他解决办法吗?
谢谢!
发布于 2018-08-24 12:53:29
好吧,我发现你在这个案子里需要做些什么。
首先,在没有参数network=ipvlanXX的情况下创建容器,这样容器就可以连接到坞桥。
然后将容器连接到您选择的网络,在我的例子中是ipvlan172。
dockernetwork.connect(container,ipv4_address=targetIP)之后,您断开码头桥接网络的容器。
network_dockerbridge.disconnect(container,force=True)最后启动容器。
container.start()所创建的容器现在具有正确的ip,并使用ipvlan网络正确子网的网关。
最好在dockerpy模块的运行/创建实现中有一个ipv4 4/ipv4 6参数。
https://stackoverflow.com/questions/52003638
复制相似问题