4 개의 스웜 노드 (ServiceA)에서 실행되는 서비스와 4 개의 노드에서 동일한 Swarm에서 실행되는 Nginx 서비스가 있습니다. Nginx 서비스는 포트 80과 443을 노출/게시합니다. 모든 서비스는 동일한 사용자 정의 오버레이 네트워크에 연결되며 가장 중요한 것은 컨테이너 내에서 서비스 이름 (ServiceA)을 컬링/핑 (ping) 할 수 있으므로 지금까지 모두 작동합니다.Nginx 업스트림에서 Docker swarm DNS/서비스 이름을 사용하는 방법
내 질문은 어떻게 서비스 이름을 작동하도록 Nginx 업스트림을 얻는가? 나는 많은 것을 읽었으며 이것을 nginx.conf resolver 127.0.0.11 ipv6=off;
에 추가하려고 시도했지만 도움이되지 않았으므로 Nginx 서비스가 시작되지 않습니다. Nginx를 얻는 방법에 대한 아이디어는 Docker 네트워크 DNS 이름을 참조하십시오.
이
상류 용기가 이미 (만든 DNS 항목) 배포 된 경우 작동해야resolver
제거 내 nginx.conf
events {
worker_connections 4096;
}
http {
include /etc/nginx/conf/*.conf;
include /etc/nginx/mime.types;
proxy_intercept_errors off;
proxy_send_timeout 120;
proxy_read_timeout 300;
upstream serviceA {
ip_hash;
server serviceA:8081;
}
server {
listen 80 default_server;
resolver 127.0.0.11 ipv6=off;
keepalive_timeout 5 5;
proxy_buffering off;
underscores_in_headers on;
location ~ ^/serviceA(?<section>.*) {
access_log /var/log/nginx/access.log nginx_proxy_upstream;
proxy_pass http://serviceA/$section$is_args$query_string;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
resolver 127.0.0.11 ipv6=off;
keepalive_timeout 5 5;
proxy_buffering off;
underscores_in_headers on;
# allow large uploads
client_max_body_size 10G;
ssl_certificate /etc/nginx/ssl/myKey.crt;
ssl_certificate_key /etc/nginx/ssl/myKey.key;
location ~ ^/serviceA(?<section>.*) {
access_log /var/log/nginx/access.log nginx_proxy_upstream;
proxy_pass http://serviceA/$section$is_args$query_string;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
'--link'를 사용해 보셨습니까? 링크를 만들면 컨테이너 내부에서 확인할 수있는 친숙한 이름이됩니다. – JulioHM
나는 docker swarm (17.03.1-ce)을 사용하고 있습니다. 그것은 떼를 사용하여 수행 할 수 있습니까? 나는 아무것도 언급하지 않는다 - 웜 문서에 링크 –
resolver를 제거해보십시오. – Kane