简体   繁体   中英

How to run basic web app container in docker-py?

I am trying to mimic running a containerized web app exposed at some port

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

in Python using docker-py . So far I got this code to start the instance:

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

But I can't access the container at the public port 1338 (which works normally with the first command) - I'm getting connection refused errors. Does anyone know if I'm missing some option to make the Python call create the functional, accessible container?

Inspecting the container tells me that the port is set up as it should be:

$ sudo docker port hello 1337
0.0.0.0:1338

I also experimented with the ports=[1337] option in the create_container call, but it didn't help either.

Update: seems this is some kind of bug . The workaround is to specify TCP explicitly:

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

I can confirm that this does not work.

This methods works ok, it may be useful for you:

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']

Then, you can access service at 0.0.0.0:<host_port>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM