我有一个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。
答案 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,也许你可以从中得到一些提示:)