Docker Python API работает медленно - PullRequest
0 голосов
/ 05 сентября 2018

Я начал использовать Docker API в python и столкнулся с проблемой выполнения времени. При запуске следующего кода создание одной сети занимает 15 секунд.

def createDockerNetwork():
nb_nw = 20
logging.info("*** Creating bridges: ")
for i in range(0,nb_nw):
    logging.info("   - bridge: nw_"+str(i))
    base = '10.'+str(i/255)+'.'+str(i%255)
    sbnet = base + '.0/24'
    iprange = base + '.0/24'
    gw = base + '.254'
    options = dict([('com.docker.network.bridge.enable_icc','true'), ('com.docker.network.bridge.name','br_'+str(i))])
    ipam_config = docker.types.IPAMPool(subnet=sbnet, iprange=iprange, gateway=gw)
    try:
        client.networks.create('nw_'+str(i), driver='bridge', options=options, ipam = ipam_config)
    except docker.errors.APIError as error:
        logging.error(" Error while creating bridge no:"+str(i)+" : \n  ---> {0}".format(error))
return 0

2018-09-05 09: 49: 05,352 - root - INFO - *** Создание мостов:

2018-09-05 09: 49: 05,352 nw_0

2018-09-05 09: 49: 20,420 nw_1

2018-09-05 09: 49: 35,503 nw_2

2018-09-05 09: 49: 50,557 nw_3

2018-09-05 09: 50: 05,616 nw_4

...

2018-09-05 09: 53: 51 693 nw_19

Странно то, что когда я запускаю ту же команду прямо внутри терминала, используя:

Докерская сеть создает nw_simu -d мост --opt com.docker.network.bridge.enable_icc = true --opt com.docker.network.bridge.name = nw_1 --subnet = 10.0.0.0 / 24 --ip -диапазон = 10.0.0.0 / 24 - шлюз = 10.0.0.254

работает мгновенно. Итак, мой вопрос:

У некоторых из вас, замечательных людей, была такая же проблема при использовании этого API? Что я могу сделать, чтобы ускорить процесс? (Я уже реализую подпрограммы для параллельного запуска)

Любые советы приветствуются!

Версии: Python 2.7.15rc1, Docker 18.06.1-ce, Ubuntu 18.04.1 LTS

1 Ответ

0 голосов
/ 06 сентября 2018

Как оказалось, я допустил ошибку в своем коде, правильный способ сделать это следующим образом:

ipam_pool = docker.types.IPAMPool(subnet=sbnet, iprange=iprange, gateway=gw)
ipam_config = docker.types.IPAMConfig(pool_configs=[ipam_pool])
try:
client.networks.create('nw_'+str(i), driver='bridge', options=options, ipam = ipam_config)
except ..... as error:

Таким образом, он работает правильно

...