gpt4 book ai didi

Nginx 无法从 docker 1.10.1 中的嵌入式 DNS 获取主机

转载 作者:IT老高 更新时间:2023-10-28 21:22:14 26 4
gpt4 key购买 nike

我有几个服务在 docker 容器中运行,它们前面有一个 nginx 服务器,所有容器都在同一个 docker 网络中。在 docker 1.10 之前,我创建了一个 dnsmasq 容器并在 nginx 中为其设置了解析器,以便可以从 nginx 发现我的服务。

但是升级到 docker 1.10.1 之后,dnsmasq 镜像就不行了。经过一番研究,我尝试使用来自地址 127.0.0.11 的新“嵌入式 dns”(我认为这应该是在 docker 网络中使用的正确方法)。虽然我可以从 nginx 容器 ping 到服务容器,但是 nginx 一直发回 无法解析(3:找不到主机)

然后我尝试使用 host 命令,我得到了非常困惑的结果:(第一个 ip 地址,然后找不到主机 - 与我从 nginx 得到的代码相同)

# host service-ui
service-ui has address 172.18.0.7
Host service-ui not found: 3(NXDOMAIN)
Host service-ui not found: 3(NXDOMAIN)

Ping 工作

/# ping service-ui
PING service-ui (172.18.0.7): 56 data bytes
64 bytes from 172.18.0.7: icmp_seq=0 ttl=64 time=1.123 ms
64 bytes from 172.18.0.7: icmp_seq=1 ttl=64 time=0.131 ms
64 bytes from 172.18.0.7: icmp_seq=2 ttl=64 time=0.178 ms

以下是我的配置的简化版本:

docker-compose.yml

version: '2'

services:
nginx:
build: .
ports:
- 80:80
service-ui:
image: service-ui
networks:
default:
external:
name: ssx

容器内的nginx.conf

 location ~ /([a-z]*)/ {
resolver 127.0.0.11;
proxy_pass http://$1-ui:9000$uri$is_args$args;
}

这也是来自主机的详细结果:

# host -v service-ui
Trying "service-ui"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55237
;; flags: qr rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;service-ui. IN A

;; ANSWER SECTION:
service-ui. 1800 IN A 172.18.0.7

Received 52 bytes from 127.0.0.11#53 in 1 ms
Trying "service-ui"
Host service-ui not found: 3(NXDOMAIN)
Received 102 bytes from 127.0.0.11#53 in 1 ms
Received 102 bytes from 127.0.0.11#53 in 1 ms
Trying "service-ui"
Host service-ui not found: 3(NXDOMAIN)
Received 102 bytes from 127.0.0.11#53 in 1 ms
Received 102 bytes from 127.0.0.11#53 in 1 ms

我的 docker 版本

Client:
Version: 1.10.1
API version: 1.22
Go version: go1.5.3
Git commit: 9e83765
Built: Thu Feb 11 19:27:08 2016
OS/Arch: linux/amd64

Server:
Version: 1.10.1
API version: 1.22
Go version: go1.5.3
Git commit: 9e83765
Built: Thu Feb 11 19:27:08 2016
OS/Arch: linux/amd64

谁能帮我找出问题所在?或者如何深入研究这个问题?

最佳答案

这是因为 docker dns 服务器不做 ipv6,但是 nginx 解析器从 1.5.8 开始同时查询 ipv6 和 ipv4:http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

您可以在 nginx 的解析器行上轻松禁用 ipv6(参见上面的链接,它只是 ipv6=off),然后它应该开始为您工作。

关于Nginx 无法从 docker 1.10.1 中的嵌入式 DNS 获取主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35471967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com