容器之间的Docker和Nginx proxy_pass

时间:2016-09-14 09:31:56

标签: django nginx docker proxy gunicorn

我试图使用Docker,Nginx,Gunicorn和Django运行配置。

目前,我成功地使用此命令设法使用Gunicorn和Django app运行我的容器:

docker run --publish 8003:8000 user/app:latest

现在当我连接到localhost:8003时,我看到我的应用程序正在运行。

此时我想在容器中设置我的Nginx以指向此应用程序,只要我浏览localhost/app

我的Nginx.conf文件如下所示:

...
http {
    server {
        listen 80;

        location /app {
        proxy_pass http://127.0.0.1:8003;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
      }
}
...

我用:

运行它
docker run --publish 80:80 user/nginx:latest

这不起作用,我无法解决这个问题,感谢任何想法如何解决这个问题!

1 个答案:

答案 0 :(得分:1)

nginx中的localhost IP 127.0.0.1仅在内部引用nginx容器。对此有几种解决方案:

  1. 简单的方法是在“主机模式网络”模式下运行nginx容器。此时,127.0.0.1实际上是指您的容器主机,它应该都是好的。请参阅the docs,但基本上只需添加--network="host"即可。这种简单性的缺点是它的安全性稍差。

  2. 或者,您可以使用“关联”容器,请参阅the docs您想要--link选项的位置。这样,从nginx容器内部,您可以使用DNS解析来访问其他容器,因此您将proxy_pass更新为链接名称。作为旁注,从docker-compose执行此操作会使事情变得相当容易。