통신

2017-09-06 9 views
0

나는이 아키텍처를 가지고 : - 호스트의 포트의 nginx를 실행 한 고정 표시기 구성 요소 (80) -이 개 서비스 응용 프로그램 : 하나 개의 노드와 하나의 MongoDB를통신

고정 표시기-작성 파일 :

version: '2' 

services: 
    backend: 
    build: ./back-end/ 
    container_name: "app-back-end" 
    volumes: 
     - ./back-end/:/usr/src/dance-app-back 
     - /usr/src/app-back/node_modules 
    ports: 
     - "3000:3050" 
    links: 
     - mongodb 

    mongodb: 
    image: mongo:3.2.15 
    ports: 
     - "3100:27017" 
    volumes: 
     - ./data/mongodb:/data/db 

의 nginx 컨테이너 포트에 도달 할 수하지 않는 것 같다

server { 
    listen  80; 
    server_name localhost; 

    #charset koi8-r; 
    #access_log /var/log/nginx/host.access.log main; 

    location /back_1 { 
     #proxy_pass http://172.17.0.2:5050/; 
     proxy_pass http://0.0.0.0:5050/; 
    } 

    #error_page 404    /404.html; 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

의 nginx 설정 파일 (300) 호스트의 0. 내가 뭘 잘못하고있어?

+0

호스트의 포트 3000에 직접 연결하여 응용 프로그램 서버에 연결할 수 있습니까? nginx 설정은 포트 5050에 대한 프록시 패스를 갖습니다. 3000이 아니어야합니까? 앱과 동일한 작성 파일에 nginx를 통합하지 않은 구체적인 이유는 무엇입니까? – vivekyad4v

+0

나는 새 웹 사이트를 가지고있을 때 nginx conf 파일을 업데이트 할 수 있도록 별도의 dockerfile에 nginx를 넣습니다. – user1445685

답변

1

당신은 당신의 호스트 포트 3000을 가지고 있고 당신이 당신의 고정 표시기-작성 파일에

변경 그렇게 필요한 것보다, 컨테이너 포트에 매핑하려는 경우 :

backend: 
    build: ./back-end/ 
    container_name: "app-back-end" 
    volumes: 
     - ./back-end/:/usr/src/dance-app-back 
     - /usr/src/app-back/node_modules 
    ports: 
     - "3000:3000" 
    links: 
     - mongodb 

그런 다음 당신 프록시로 전달하려는 컨테이너에 nginx를 연결할 수 있습니다.

nginx: 
    restart: always 
    image: nginx:1.13.1 
    ports: 
     - "80:80" 
    depends_on: 
     - backend 
    links: 
     - backend:backend 

를 다음의 nginx 파일이 열려 해당 컨테이너의 포트에 프록시 싶습니다 응용 프로그램 컨테이너의 이름을 언급 :

은 작성 파일을 추가합니다. 대신 nginx를 기억 하시죠 컨테이너의 IP의

server { 
    listen  80; 
    server_name localhost; 

    #charset koi8-r; 
    #access_log /var/log/nginx/host.access.log main; 

    location /back_1 { 
     proxy_pass http://backend:3000/; 
    } 

    #error_page 404    /404.html; 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

, 당신은 컨테이너 이름을 연결할 수와의 nginx의 설정 및 고정 표시기는 당신을 위해 그 IP를 해결됩니다.

+0

답장을 보내 주셔서 감사합니다! 나는 그것을 조금만 시도 할 것이다. 하지만 단 한가지 질문 : nginx를 다른 서비스와 함께 작성 파일에 넣음으로써 새로운 웹 사이트를 추가 할 때 전체 설치를 다시 시작해야합니까? 나는 새로운 웹 사이트를 가지고있을 때 nginx conf 파일을 업데이트 할 수 있도록 별도의 dockerfile에 nginx를 넣습니다. – user1445685

+1

Nginx 설정을 업데이트하는 경우에는 nginx 서비스/컨테이너 만 다시 생성됩니다. 나머지 컨테이너/서비스는 영향을 미치지 않습니다. 하나의 호스트 또는 다중 호스트에 배포하든 모든 것을 단일 작성 파일에 통합하는 것이 이상적입니다. – vivekyad4v

+0

@ viveky4d4v있어! 다시 한 번 감사드립니다. 그냥 더 깊이 파고 들어, 내 문제는 내가 도커 작성 파일에 외부 네트워크로 내 nginx 컨테이너의 네트워크를 지정하지 않은 사실에서 온 수 있습니다. 권리? – user1445685