【发布时间】:2018-12-18 04:22:17
【问题描述】:
我有一个 nginxplus 容器和一个在 windows 10 上以 docker swarm 模式运行的演示服务。
我将端点模式用作演示服务的 dnsrr,以便 nginx 可以使用 docker DNS 服务器作为演示服务的解析器。
但我在 nginxplus 日志中收到错误消息 “无法解析 demosvcalias 的服务 http(3:找不到主机)”
Docker resolv.conf 显示 127.0.0.11 作为名称服务器,看起来正确。
**docker exec -it b7665155d8e0 cat /etc/resolv.conf**
search xxx.com dev.xxx.com
nameserver 127.0.0.11
options ndots:0
docker-compose 用于演示服务
version: "3.3"
services:
demosvc:
image: demo:latest
deploy:
endpoint_mode: dnsrr
replicas: 1
resources:
limits:
cpus: "0.1"
memory: 5000M
restart_policy:
condition: on-failure
#ports:
#- "8081:8080"
networks:
my-swarm-network :
aliases:
- demosvcalias
networks:
my-swarm-network:
external: true
docker-compose for nginx plus
version: "3"
services:
nginxp:
image: nginxp:latest
deploy:
replicas: 1
resources:
limits:
cpus: "0.1"
memory: 5000M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- my-swarm-network
networks:
my-swarm-network:
external: true
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
resolver 127.0.0.11 valid=60s ipv6=off;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html;
}
location /demo {
proxy_pass http://demobackend;
}
}
upstream demobackend {
zone backend 32k;
server demosvcalias service=http resolve;
}
}
我还可以使用 docker exec 实用程序从 nginx 容器中卷曲 http://demosvscalias:8080/demo.html。但是 nginx 解析器无法使用 Docker 嵌入式 DNS 服务器 (127.0.0.11) 解析 demosvc。
我这里有什么遗漏吗?
更新: 在下面的更新之后,负载平衡在 docker 嵌入式 DNS 服务器作为解析器的情况下工作正常。
在 nginx.conf 中
服务器 demosvcalias service=http 解析 ==> 服务器 demosvcalias:8080 解析;
更新的 nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format upstreamlog '[$time_local] $remote_addr - $remote_user - $server_name to: $upstream_addr: $request upstream_response_time $upstream_response_time msec $msec request_time $request_time';
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
resolver 127.0.0.11 valid=60s ipv6=off;
resolver_timeout 10s;
server {
access_log /var/log/nginx/access.log upstreamlog;
listen 80;
server_name localhost;
location / {
root html;
index index.html;
}
location /demo {
proxy_pass http://demobackend;
}
}
upstream demobackend {
zone backend 32k;
server demosvcalias:8080 resolve;
}
}
【问题讨论】:
标签: docker dns reverse-proxy resolver