2014-01-14 66 views
4

我试图模仿运行在使用docker-py一些端口如何在docker-py中运行基本web应用程序容器?

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

在Python暴露集装箱化的Web应用程序。到目前为止,我得到这个代码启动实例:

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 

我也与create_container呼叫ports=[1337]选项尝试,但它并没有帮助。

更新:看起来这是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

相关问题