2016-03-22 1 views
0

Я пытаюсь запустить контейнер, используя порты docker-py и bind с хостом. Боюсь, я не экспериментировал с Докером, но я много чего пробую, и я не вижу, где моя ошибка.Связывание порта с контейнером в docker-py не работает

Моя докер версия API является 1,22

Вот мой код для создания контейнера:

from docker import Client 
cli = Client(base_url='tcp://172.16.3.87:2375', version='1.22') 
container_id = cli.create_container('busybox', 'ls', name='test', ports=[1111], host_config=cli.create_host_config(port_bindings={ 1111:8000 }, publish_all_ports=True)) 
print(container_id) 

создается контейнер, но не обязывать:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 
d3ad8566958d busybox "ls" 42 seconds ago Created test 

Однако, хост получил команду. Я захватил входящий трафик на порт 2375. Вот результат:

{"Tty": false, "NetworkDisabled": false, "Image": "busybox", "Cmd": ["ls"], "StdinOnce": false, "HostConfig": {"PortBindings": {"1111/tcp": [{"HostPort": "8000", "HostIp": ""}]}, "PublishAllPorts": true}, "AttachStdin": false, "MemorySwap": 0, "Memory": 0, "ExposedPorts": {"1111/tcp": {}}, "AttachStderr": true, "AttachStdout": true, "OpenStdin": false} 

Когда я пытаюсь связать на хосте напрямую, он работает без проблем.

Кто-то экспериментировал с тем же вопросом?

Спасибо вам заранее!

ответ

0

Код, который вы отправили, создает контейнер. Чтобы связать порты, вам нужно запустить контейнер.

from docker import Client 
cli = Client(base_url='tcp://172.16.3.87:2375', version='1.22') 
container_id = cli.create_container(
    'busybox', 
    'ls', 
    name='test', 
    ports=[1111], 
    host_config=cli.create_host_config(port_bindings={ 1111:8000 }, publish_all_ports=True) 
) 

response = cli.start(container=container_id.get('Id')) 
print(container_id) 
print(response) 

Как только вы запустите контейнер, он должен привязать порты.

+0

Благодарим вас за ответ. Я попробовал, но это не решает проблему: –

+0

EDIT: ваше решение действительно работает, контейнер нужно запустить, чтобы связать порт. Однако мне нужно было заменить «ls» на «top». Потому что с busybox ls он мгновенно останавливает контейнеры. Спасибо за ваш ответ –

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