I have an nginxplus container and a demo service running in docker swarm mode on windows 10.
I am using endpoint-mode as dnsrr for the demo service so that nginx can use the docker DNS server as resolver for the demoservice.
But I am getting an error in nginxplus logs saying "service http of demosvcalias could not be resolved (3: Host not found)"
Docker resolv.conf shows 127.0.0.11 as the name server which looks correct.
**docker exec -it b7665155d8e0 cat /etc/resolv.conf**
search xxx.com dev.xxx.com
nameserver 127.0.0.11
options ndots:0
docker-compose for demo service
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;
}
}
I am able to curl the http://demosvscalias:8080/demo.html from the nginx container using docker exec utility also. But nginx resolver fails to resolve the demosvc using the Docker embedded DNS server (127.0.0.11).
Am I missing anything here ?
UPDATE: After the below update , load balancing is working fine with docker embedded DNS server as resolver.
in nginx.conf
server demosvcalias service=http resolve ==> server demosvcalias:8080 resolve;
UPDATED 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;
}
}