docker-py: создание контейнера с определенным IP в сети IPvlan - PullRequest
0 голосов
/ 24 августа 2018

Я создал сеть с драйвером: 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 и изменит шлюз по умолчанию.

Есть ли другие решения?

Спасибо!

1 Ответ

0 голосов
/ 24 августа 2018

Хорошо, я выяснил, что вам нужно сделать в этом случае.

Сначала создайте контейнер без параметра network = ipvlanXX , чтобы контейнер получил соединение с док-мостом.

Затем подключите контейнер к сети по вашему выбору, в моем случае ipvlan172.

dockernetwork.connect(container,ipv4_address=targetIP)

После этого вы отключаете контейнер от сети Docker Bridge.

network_dockerbridge.disconnect(container,force=True)

И, наконец, запустить контейнер.

container.start()

Созданный контейнер теперь имеет правильный ip и использует шлюз правильной подсети сети ipvlan.

Было бы неплохо иметь параметр ipv4 / ipv6 в реализации run / create модуля dockerpy.

...