如何将nginx与docker一起用作反向代理

时间:2014-12-11 11:28:46

标签: django nginx proxy docker

我有一个django应用程序,并在localhost:8000上使用gunicorn运行它 我有配置nginx将其用作反向代理。

    upstream django {
 #  fail_timeout=0 means we always retry an upstream even if it failed
 #  to return a good HTTP response (in case the Unicorn master nukes a
 #  single worker for timing out).

  server localhost:8000 fail_timeout=0;
}

我知道如何公开80端口并在容器中运行nginx,但我不明白如何连接在localhost上运行的gunicorn和容器中的nginx。

2 个答案:

答案 0 :(得分:2)

您需要利用docker创建的网桥的IP。有一篇关于Docker的好文章解释了这个: https://docs.docker.com/v1.6/articles/networking/

  

当Docker启动时,它会创建一个名为docker0的虚拟接口   主机。它从中随机选择一个地址和子网   RFC 1918定义的私有范围,未在主机上使用   机器,并将其分配给docker0。

如果我们查看分配给docker0(sudo ip addr show docker0)的IP地址,我们可以将其用作IP地址,以便在docker容器中与主机通信。

    upstream django {
 #  fail_timeout=0 means we always retry an upstream even if it failed
 #  to return a good HTTP response (in case the Unicorn master nukes a
 #  single worker for timing out).

  server IP_OF_DOCKER0:8000 fail_timeout=0;
}

我没有对上述内容进行过测试,但我相信它应该可行。如果不是,您可能还需要将gunicorn绑定到docker0 IP。

这个答案对这个过程有一些很好的了解...... From inside of a Docker container, how do I connect to the localhost of the machine?

答案 1 :(得分:0)

更好的方法可能是" dokerize" django应用程序也是,构建一个 dokerized nginx和dockerized django应用程序之间的网络 然后将来自dockerized nginx的http端口暴露给所有接口。

关于这一点,这是一个很好的post,也许你可以从中得到一些提示:)