Routes Can';t通过IP地址访问docker容器

Routes Can';t通过IP地址访问docker容器,routes,containers,docker,Routes,Containers,Docker,我正在开发一个django应用程序,我决定将我所有的开发人员都转移到docker容器中。我有一个小问题: 基本上,我有3个容器: -应用程序(保存django代码) -postgres(保存数据库) -web(这是一种nginx,将来自端口80的请求转发到django使用的端口8000) 我的问题是,我无法从“应用程序”容器外部访问我的网站,我的nginx日志显示: 2014/12/21 22:22:35 [error] 9#0: *9 connect() failed (111: Connec

我正在开发一个django应用程序,我决定将我所有的开发人员都转移到docker容器中。我有一个小问题: 基本上,我有3个容器: -应用程序(保存django代码) -postgres(保存数据库) -web(这是一种nginx,将来自端口80的请求转发到django使用的端口8000) 我的问题是,我无法从“应用程序”容器外部访问我的网站,我的nginx日志显示:

2014/12/21 22:22:35 [error] 9#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.59.3, server: _, request: "GET / HTTP/1.1", upstream: "http://172.17.0.62:8000/", host: "192.168.59.103"
因此,nginx显然无法转发连接,因为“app”容器(192.168.59.103)不侦听连接。但事实并非如此,因为我已连接到应用程序容器,并尝试发出一个curl请求,但是: -如果我做了
curl“localhost:8000”
,它就可以工作了(我得到了django欢迎页面) -如果我做了
curl“http://172.17.0.62:8000/“
它不工作 因此,我成功地隔离了问题并运行了“route”命令,该命令显示:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.42.1     0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 eth0
我在boot2docker ssh上输入了“route”,结果如下:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.0.2.2        0.0.0.0         UG    1      0        0 eth0
10.0.2.0        *               255.255.255.0   U     0      0        0 eth0
127.0.0.1       *               255.255.255.255 UH    0      0        0 lo
172.17.0.0      *               255.255.0.0     U     0      0        0 docker0
192.168.59.0    *               255.255.255.0   U     0      0        0 eth1
很明显,我没有到我的容器的好路径,但这很奇怪,因为我没有触摸它的任何配置。有人有线索吗?

一些评论:

web(这是一种nginx,将来自端口80的请求转发到django使用的端口8000)

如果您使用nginx只是为了从80转发到8080,那么为什么不使用-p80:8080运行应用程序容器呢?没有中间容器,它也有同样的效果

如果您希望nginx能够与应用程序容器对话,则在运行docker run for nginx时,必须使用
--link app_container:ALIAS
开关将应用程序容器链接到nginx容器。然后,您可以查看nginx容器内的/etc/hosts以查找别名映射的IP。每个docker容器都有自己的IP从docker bridge开始,需要连接以实现通信


Docker容器间通信使用iptables进行管理。运行iptables-L查看配置的路由。您可能不应该手动处理此问题。链接容器通常可以很好地管理这些事情。

对于所有容器,Docker run命令是什么样子的?我也在使用nginix进行部署rposes。我知道我可以简单地映射端口,但我需要为我的公司这样做。问题是容器之间的路由混乱。每个容器都不知道自己的IP地址。如果我ping localhost,它可以工作,但如果我ping它的IP地址,它就不能工作