Docker和Nginx的proxy_pass之间的容器

我正在尝试运行Docker,Nginx,Gunicorn和Django的configuration。

目前我成功地设法使用这个命令来运行我的Gunicorn和Django应用程序的容器:

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

现在当我连接到本地主机: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 

这是行不通的,我不能把我的头围绕这个,谢谢任何想法如何解决这个问题!

你的nginx里的localhost IP 127.0.0.1只能在内部引用nginx容器。 有几个解决scheme,或者:

  1. 简单的事情是在“主机模式联网”模式下运行你的nginx容器。 在这一点上, 127.0.0.1实际上是指您的容器主机,它应该都是好的。 看到文档 ,但基本上只是添加 – --network="host"应该工作。 这个简单的缺点是它的安全性稍差。

  2. 或者,您可以使用“链接”容器,请参阅您希望使用 – --link选项的文档 。 这样,从nginx容器内部,你可以使用DNSparsing来访问不同的容器,所以你应该更新你的proxy_pass到链接名称。 作为一个侧面说明,从docker-compose这样做会使事情变得相当容易。