我创建了一个带有驱动程序的网络: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给容器一个 docker bridge 网络的 ip 和 docker bridge 的默认网关。然后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)
创建的容器没有得到我想要的 docker bridge 网络的 ip,而是命令的 targetIP
dockernetwork.connect(container,ipv4_address=targetIP)
将被忽略。使创建的Container拥有ipvlan网络的一个随机子网的IP
解决此问题的一种方法是创建一个脚本,该脚本将在容器启动后执行,并删除 dockerhost ip 并更改默认网关。
还有其他解决方案吗?
谢谢!