Networking Docker网络Nginx解析器
我试图在我的配置中删除不推荐使用的Docker链接。当我重新创建一个容器时,剩下的就是摆脱了那些Networking Docker网络Nginx解析器,networking,nginx,docker,Networking,Nginx,Docker,我试图在我的配置中删除不推荐使用的Docker链接。当我重新创建一个容器时,剩下的就是摆脱了那些坏网关nginx反向代理错误 注意:我在桥接模式下使用Docker网络。(docker网络创建nettest) 我在nginx中使用以下配置片段: location / { resolver 127.0.0.1 valid=30s; set $backend "http://confluence:8090"; proxy_pass $backend; 我在Dock
坏网关
nginx反向代理错误
注意:我在桥接模式下使用Docker网络。(docker网络创建nettest
)
我在nginx中使用以下配置片段:
location / {
resolver 127.0.0.1 valid=30s;
set $backend "http://confluence:8090";
proxy_pass $backend;
nettest
启动了一个主机名为confluence
的容器李>
nettest
上启动了nginx容器converge
confluence
列在nginx容器的/etc/hosts
文件中send()失败(111:连接被拒绝),解析程序:127.0.0.1:53
/etc/resol.conf
有人知道如何使用Docker Networks配置nginx解析器,或者知道如何强制nginx正确解析Docker网络主机名的替代方法吗?您需要像
dnsmasq
这样的本地dns服务器才能使用127.0.0.1解析。如果您使用的是alpine(nginx:alpine
)变体,请尝试使用apk add——更新dnsmasq来安装它。首先,您应该使用位于127.0.0.11
的Docker嵌入式DNS服务器
您的问题可能由以下原因之一引起:
http {
resolver 127.0.0.11 ipv6=off;
}
这可能不再是Docker 1.11的问题:
修复了不将docker域IPv6查询转发到外部服务器的问题
()
解析器
配置指令。在我的例子中,我在服务器
块解析器8.8.8.8.4.4
from,它覆盖了resolver 127.0.0.11
块中的code>。这让我挠头很久了也许您应该检查容器的
/etc/resolv.conf
它显示容器的正确DNS配置,然后将该DNS服务器IP用于解析程序
127.0.0.11
在Rancher中不起作用我们使用windows上的docker容器尝试使用172.0.0.11上的docker internal resolver查找host.docker.internal。除host.docker.internal外,所有查询都将正确解析。修复方法是将ipv6=off标志添加到nginx.conf中的解析器行。在我出现此错误的一些情况下,添加解析器超时1s代码>到Nginx配置解决了这个问题。大多数情况下,我没有解析器
条目
编辑:对于可以显式定义名称服务器的容器,什么也起作用:resolver DNS-IP valid=1s代码>我用以下方法解决了这个问题:
docker run --rm -d --network host --name "my_domain" nginx
我在运行带有角度前端的“节点:12.18-alpine”时,遇到了与proxy_pass相同的问题
在当地,它与:
resolver 127.0.0.11;
就这么简单!只需执行:
$ cat /etc/resolv.conf | grep nameserver
在容器中获取此ip地址
但是,在部署到kubernetes(AWS EKS)时,我得到了非常相同的错误:
failed (111: Connection refused) while resolving, resolver: 127.0.0.11:53
解决方案:
第一个解决方案是找出kube dns服务的IP,如下所示:
$ kubectl get service kube-dns -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 172.20.0.10 <none> 53/UDP,53/TCP 178d
如果没有网络驱动程序,这看起来不会以任何方式得到解决。原因是Nginx需要解析程序的ip,这无法自动链接到任何Docker管理的DNS解析程序。硬编码Docker DNS解析程序的ip地址(127.0.0.11
)不应成为问题,因为它不会更改。请注意,Docker DNS解析器仅适用于用户定义的网络(Docker network create…
)。参考:前面评论的更多官方参考:在KubernetShow中运行nginx时,我必须添加ipv6=off
,我是否在容器内检查nginx是否解决了此问题?@Fazy为什么需要执行此检查?哦,抱歉,只是为了补充建议。因为我的朋友抱怨它不起作用,也许我们应该多读一些答案carefully@L.Guthardt,请不要写这样的评论。他们不帮助人们,而这个答案确实如此@似乎,当编织地址空间受CIDR约束时,Docker使用不同的DNS(而不是127.0.0.11)。将解析器设置为容器/etc/resolv.conf
中注明的名称服务器IP有帮助。谢谢。你是说127.0.0.11
,而不是172.0.0.11
?如果nginx能够解析“kube dns.kube system”,那么我不明白为什么需要在配置中存在这个问题。然而,这是在k8s中唯一对我有用的东西。我认为k8s不再使用docker,因此127.0.0.11技巧不再有效。@Phil,当您部署到kubernetes/etc/resolv.conf时,其名称服务器已更改为kube dns IP。这就是为什么它可以解析“kube dns.kube系统”。“127.0.0.11”是我用来在本地运行它的。关于docker和k8s支持,我仍然在1.18:-)是的,我明白了,但是解析解析器感觉有点混乱。如果nginx已经可以使用OS DNS/resolv.conf解析解析程序名,为什么还需要告诉它如何解析其他名称,例如proxy_pass中的名称。我现在明白你的意思了。真的。不幸的是,我不能回答这个问题,但我要说的是,这对我来说也是可行的:-(
resolver kube-dns.kube-system valid=10s;