Docker-py: создать контейнер с определенным IP-адресом в сети IPvlan

z0nderling спросил: 31 июля 2018 в 09:57 в: docker

Я создал сеть с драйвером: 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 (target 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)

будет проигнорирован. Чтобы созданный Контейнер имел IP-адрес случайной подсети сети ipvlan.

Один из способов решения этой проблемы - создать скрипт, который будет запущен после запуска контейнера и удалит ip-адрес dockerhost и изменяет шлюз по умолчанию.

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

Спасибо!


1 ответ

z0nderling ответил: 31 июля 2018 в 11:13

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

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

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

dockernetwork.connect(container,ipv4_address=targetIP)

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

network_dockerbridge.disconnect(container,force=True)

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

container.start()

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

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