Я создал сеть с драйвером: 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 сети Docker Bridge и шлюз по умолчанию для 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)
Созданный контейнер не получает IP-адрес сети Docker Bridge, который я намеревался , но targetIP команды
dockernetwork.connect(container,ipv4_address=targetIP)
будет игнорироваться. Чтобы созданный Контейнер имел IP случайной подсети сети ipvlan
Один из способов решить эту проблему - создать сценарий, который будет выполняться после запуска контейнера, удалит IP-адрес dockerhost и изменит шлюз по умолчанию.
Есть ли другие решения?
Спасибо!