【问题标题】:docker-py: Create container with specific IP in IPvlan Networkdocker-py:在 IPvlan 网络中创建具有特定 IP 的容器
【发布时间】:2018-08-24 20:53:29
【问题描述】:

我创建了一个带有驱动程序的网络: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 并更改默认网关。

还有其他解决方案吗?

谢谢!

【问题讨论】:

    标签: docker dockerpy docker-network


    【解决方案1】:

    好的,我知道在这种情况下您需要做什么。

    首先你创建不带参数network=ipvlanXX的容器,这样容器就可以连接到docker bridge。

    然后你将容器连接到你选择的网络,在我的例子中是 ipvlan172。

    dockernetwork.connect(container,ipv4_address=targetIP)
    

    然后断开 docker bridge 网络的容器。

    network_dockerbridge.disconnect(container,force=True)
    

    最后启动容器。

    container.start()
    

    创建的容器现在具有正确的 ip 并使用 ipvlan 网络的正确子网的网关。

    如果在 dockerpy 模块的运行/创建实现中有一个 ipv4/ipv6 参数会很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-19
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      相关资源
      最近更新 更多