2017-12-03 1 views
0

간혹 nginx 서버가 잘못된 docker-compose 서비스로 요청을 전달하는 경우가 있습니다.Docker 작성 네트워크가 노드를 혼동했습니다.

나는 고정 표시기-작성 설정

version: "3.0" 
services: 
    proj-reader: 
    image: repositry:5000/my-company.com/proj-reader 
    ports: 
     - "28090:8080" 
     - "28095:5005" 
    proj-helpdesk: 
    image: repository:5000/my-company.com/proj-helpdesk 
    ports: 
     - "29080:8080" 
     - "29085:5005" 
    proj-frontend: 
    image: repository:5000/my-company.com/proj-frontend 
    ports: 
     - "80:80" 
    links: 
     - "proj-helpdesk:backend" 
     - "proj-reader:reader" 
... 

프론트 엔드는 NodeJs 응용 프로그램과의 nginx 컨테이너입니다 있습니다. 그리고 우리는 다음의 nginx 구성이 있습니다

upstream backend { 
    server backend:8080; 
    keepalive 30; 
} 

upstream reader { 
    server reader:8080; 
    keepalive 30; 
} 

server { 
    listen  80; 
    client_max_body_size 2m; 
    server_name localhost; 
    root /usr/share/nginx/html; 

    location /api/ { 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_pass   http://backend; 
     proxy_read_timeout 600; 
    } 

    location /web-callback/ { 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_pass   http://reader; 
    } 

} 

을 그리고 가끔/웹 콜백에 대한 해당 요청을 볼 수 있습니다/프론트 엔드 서비스에 대한 링크 섹션에서 지적하지 않는 다른 서비스에 받았다된다. 처음에는 리더 서비스를 다시 시작한 후에 발생한 일입니다. 그러나 yerstaday 이런 상황이 반복되고 독자가 다시 시작되지 않았다는 것을 알고 있습니다. 무엇입니까? 미래에이 상황을 어떻게 막을 수 있습니까?

+0

사용 K8S, 그것은 좋습니다. –

+0

링크가 더 이상 사용되지 않는 경우 서비스 이름 -https://github.com/docker/components/issues/2831을 사용하십시오. –

+0

또한 [사용자 정의 네트워크에서 임베디드 DNS 서버] (https://docs.docker.com/engine/userguide/networking/configure-dns/)를 사용하십시오. nginx 설정'resolver 127.0.0.11; ' –

답변

0

당신은 사용하려고합니다

location ^~ /api/ { 
    # Queries beginning with /api/ and then stops searching. 
} 

location ^~ /web-callback/ { 
    # Queries beginning with /web-callback/ and then stops searching. 
} 

https://www.keycdn.com/support/nginx-location-directive/

+0

아니에요. nginx 문제. 요청을 올바르게 전달하기 때문입니다. 그것은 도커 네트워킹 문제입니다. –

+0

확인. nginx 컨테이너의/etc/hosts에있는 값을 확인하고 백엔드 컨테이너 및 판독기 컨테이너의 IP 주소와 비교해보십시오. – Ludek

관련 문제