2016-06-25 14 views
3

Ich habe eine App in einem Docker-Container unter der Portnummer 3000, die dem Host (Port 3050 entspricht dem Port 3000 des Containers) ausgesetzt ist, und ich möchte dies verwenden nginx-proxy, um auf URLs wie http://localhost/users zu zeigen/proxy zu http://localhost:3050/users.Nginx-Reverse-Proxy für einen anderen Docker-Container einrichten

Ich habe diesen Block in meiner docker-compose.yml Datei:

nginx_service: 
    image: jwilder/nginx-proxy 
    container_name: nginx_server 
    ports: 
    - "80:80" 
    - "443:443" 
    volumes: 
    - ./ssl_certs:/etc/nginx/certs 
    - /var/run/docker.sock:/tmp/docker.sock:ro 

Unterhalb der Behälter in docker-compose.yml definiert ist, dass mein App auf dem Port 3000 im Docker Behälter läuft:

api: 
    build: . 
    container_name: api 
    environment: 
    - VIRTUAL_HOST= service.myserver.com 
    - VIRTUAL_PROTO=https 
    volumes: 
    - "./API:/host" 
    links: 
    - Mongo:Mongo 
    ports: 
    - "3050:3000" 

Nachdem ich anfangen bis die Docker Container, kann ich http://localhost:3050/users im Browser öffnen, aber nicht http://localhost/users, die mir eine 503 Fehler für Service vorübergehend nicht verfügbar.

Vielleicht bekomme ich die ganze Idee falsch, könnte mir jemand helfen oder mich mit nginx Reverse Proxy korrigieren?

+2

Sie müssen die Weiterleitungsregel in nginx config hinzufügen. Hast du das gemacht? – Shibashis

+0

eigentlich ist es nicht wegen der Weiterleitungsregel. Danke – TonyGW

Antwort

7

Nach etwas Suche zu machen, ich war in der Lage, eine Arbeits docker-compose.yml an einem Strang ziehen, die einen Arbeits nginx Reverse-Proxy hat (Bild: jwilder/nginx-Proxy in Docker Hub) an den node.js-basierten Web-App Ich habe in einem separaten Behälter.

Der Schlüssel zu es Arbeit folgt:

  1. setzen die VIRTUAL_HOST=port im nginx Reverse-Proxy-Container, sollte diese port der Hafen sein, dass meine node.js App in seinem Behälter läuft (nicht der Port zugeordnet auf dem Host!)
  2. Wenn der Nginx-Reverseproxy auf https festgelegt werden soll, sollten Sie ein SSL-Zertifikat einrichten, aber http (nicht https) auf die Umgebungsvariable VIRTUAL_PROTO=http im Web-App-Container setzen.

unten ist die Arbeits Docker-compose.yml:

nginx_service: 
    image: jwilder/nginx-proxy 
    container_name: nginx_server 
    ports: 
    - "80:80" 
    - "443:443" 
    volumes: 
    - ./ssl_certs:/etc/nginx/certs 
    - /var/run/docker.sock:/tmp/docker.sock:ro 
    environment: 
    - VIRTUAL_PORT=3000 # 3050 port on host does not work! 


api: 
    build: . 
    container_name: api 
    environment: 
    - VIRTUAL_HOST=service.myserver.com 
    - VIRTUAL_PROTO=http # should be http even if you use https to the proxy, because node.js uses http! 
    volumes: 
    - "./API:/host" 
    links: 
    - Mongo:Mongo 
    ports: 
    - "3050:3000" 

Hope this jemand einen Tag auf dieser Seite von einer Suchmaschine Landung helfen!

+3

Um 'http: // localhost/users' arbeiten zu lassen, sollte' VIRTUAL_PORT = 3050' in 'environment' von' api' Dienst hinzugefügt und 'environment' Block von' nginx_service' entfernt werden, Sie müssen Port 3000 nicht zuordnen von Ihrem 'api'-Dienst zum Host 3050. – Yadvendar

Verwandte Themen