2014-01-14 7 views
4

Я пытаюсь имитировать запуск контейнерной веб-приложение подвергается в какой-то портКак запустить основной контейнер веб-приложений в docker-py?

sudo docker run -d -p 1338:1337 kermit/hellonode 

в Python с использованием docker-py. До сих пор я получил этот код для запуска экземпляра:

container = c.create_container('kermit/hellonode', name='hello') 
c.start(container, port_bindings={1337: ('0.0.0.0', 1338)}) 

Но я не могу получить доступ к контейнеру в общественном порте 1338 (который работает в обычном режиме с первой командой) - я получаю отказ в соединении ошибок. Кто-нибудь знает, если мне не хватает какой-либо опции, чтобы заставить вызов Python создать функциональный доступный контейнер?

Осмотрев контейнер говорит мне, что порт настроен как это должно быть:

$ sudo docker port hello 1337 
0.0.0.0:1338 

Я также экспериментировал с ports=[1337] опции в create_container вызова, но это не помогло.

Обновление: похоже, что это some kind of bug. Обходной путь заключается в том, чтобы указать TCP явно:

container = c.create_container('kermit/hellonode', name='hello', ports=[(1337, 'tcp')]) 

ответ

3

Я могу подтвердить, что это не работает.

Этот метод хорошо работает, это может быть полезно для вас:

container = c.create_container('kermit/hellonode', name='hello', ports=[1337]) 
c.start(container, publish_all_ports=True) 
info = c.inspect_container(container) 
host_port = info['NetworkSettings']['Ports']['1337'][0]['HostPort'] 

Затем, вы можете получить доступ в службу 0.0.0.0:<host_port>

+0

Спасибо, что работал. Поскольку вы также подтвердили это поведение, я [сообщил о проблеме для docker-py] (https://github.com/dotcloud/docker-py/issues/141). – metakermit

+1

ОК, я обновил свой вопрос с помощью другого обходного пути, предложенного @mpetazzoni - таким образом можно указать желаемый публичный порт вручную. – metakermit

Смежные вопросы