Nginx Plus无法使用Docker嵌入式DNS服务器解析服务

学习者

我有一个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-为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服务= 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服务器作为解析器的情况下可以正常工作。

在nginx.conf中

服务器demosvcalias服务= 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;           
    }

}

我将不得不研究为什么service = http引起问题的细节。不知道是否由于我使用的Nginxplus版本或其他原因。如果我发现任何东西就会更新

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章