consul 用如下命令启动:
sudo docker run -d --name=consul -p 8500:8500 -p 8600:8600/udp -v /home/alex/code/consul-data:/consul/data consul:1.15.4
nginx.conf 配置如下:
stream {
resolver 192.168.1.125:8600 ipv6=off valid=30s;
upstream tcp_servers {
server my-service.service.consul:6789;
}
server {
listen 12345;
proxy_pass tcp_servers;
proxy_connect_timeout 1s;
}
}
后端的 TCP 服务器已经成功注册到 consul ,执行 dig @192.168.1.125 -p 8600 my-service.service.consul 是可以正确解析域名的,但是配置在 nginx 里面,就提示:
nginx: [emerg] host not found in upstream "my-service.service.consul:6789" in /etc/nginx/nginx.conf:73
nginx: configuration file /etc/nginx/nginx.conf test failed
搞了一上午,怎么改配置都不行
1
guisheng 197 天前 via iPhone
容器异常或者不在同一个网络中
|
3
goforwardv2 OP @guisheng nginx 和 consul docker 开在一台机器上也不行,同时 consul 已经用了--network host 也不行
|
4
guisheng 197 天前 via iPhone
@goforwardv2 consul 先启动,nginx 后启动。 指定了宿主机网络的话 你给 nginx -add host
|
5
F7TsdQL45E0jmoiG 197 天前
nginx 中指定 resolver
|
6
hehe5120 197 天前
6789 这个端口号好像不对吧。nginx 是在 docker 里面吗? 在 nginx 环境下 ping my-service.service.consul 的结果是什么?
|
7
goforwardv2 OP @morenacl @hejiangyuan resolver 指定了,并且 nginx 是系统命令运行的
|
8
xoic 197 天前
nginx 版本?
|
9
goforwardv2 OP @xoic nginx version: nginx/1.14.0 (Ubuntu)
|
10
chenuu 197 天前
nginx-plus 才支持 consul 吧
|
11
goforwardv2 OP @chenuu 有可能啊,尝试了很多方法都无效,我试试 nginx-plus
|
12
chenuu 197 天前
开源的 nginx,对 consul 的话,你可以试试 consul-template 的方案,或者换掉 ng,使用 caddy 或者 traefik
|
13
guanzhangzhang 197 天前
看着是你 resolve 的层级不对,你自己抓包 53 看看是不是发往 8.8.8.8 了
|
14
xoic 197 天前
@goforwardv2 感觉版本不支持 resolver 带端口的写法
该指令出现在 1.17.5 版中。 配置用于将上游服务器的名称解析为地址的名称服务器,例如: resolver 127.0.0.1 [::1]:5353 valid=30s; 文档是这么写的。 |