我有两个带nginx的docker容器。 container1链接到container2。 Docker然后在 / etc / hosts 中添加了一个条目,我输入了nginx配置,如下所示:
server {
location ~ ^/some_url/(.*)$ {
proxy_pass http://container1/$1;
}
}
我可以从 container2 ping container1 ,但是nginx无法解析它:
* 1没有定义解析容器1的解析器
如何将请求委托给另一个泊坞窗容器?
答案 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;
}
}