nginx proxy_pass到链接的docker容器

时间:2015-01-19 16:04:38

标签: nginx docker reverse-proxy

我有两个带nginx的docker容器。 container1链接到container2。 Docker然后在 / etc / hosts 中添加了一个条目,我输入了nginx配置,如下所示:

server {
    location ~ ^/some_url/(.*)$ {
        proxy_pass http://container1/$1;
    }
}

我可以从 container2 ping container1 ,但是nginx无法解析它:

  

* 1没有定义解析容器1的解析器

如何将请求委托给另一个泊坞窗容器?

3 个答案:

答案 0 :(得分:31)

直接使用上游块而不是容器名称

upstream backend {
    server container1;
}
server {
    location ~ ^/some_url/(.*)$ {
        proxy_pass http://backend/$1;
    }
}

这应该允许正常的名称解析,提供一种方法来轻松使用与nginx的docker链接。

答案 1 :(得分:29)

您可以使用嵌入式Docker DNS服务,如果已启用,请检查您的容器解析器:

cat /etc/resolv.conf

应该是:

nameserver 127.0.0.11

将此IP用作解析器:

server {
    location ~ ^/some_url/(.*)$ {
        resolver 127.0.0.11;
        proxy_pass http://container1/$1;
    } }

答案 2 :(得分:6)

您应该看看有关使用/ etc / hosts作为解析器的答案:Using /etc/hosts as resolver for url rewriting

基本上,您的dns或解析程序在查找过程中不使用/ etc / hosts来解析名称,但您可以通过安装dnsmasq并使用127.0.0.1作为解析程序来解决此问题。您可以直接在nginx配置中添加127.0.0.1作为解析器:

server {
    location ~ ^/some_url/(.*)$ {
        resolver 127.0.0.1;
        proxy_pass http://container1/$1;
    }
}