2016-07-24 35 views
1

Ich versuche, ein Docker-Beispiel mit Nginx (in einem Container ausgeführt) zu konfigurieren, die 3 Container mit einer Python-App in uwsgi zeigt.404 Fehler beim Zugriff vom lokalen Host: NGINX uWSGI

Wenn Sie Nginx über Docker IP für den Container versuchen, ist die App ohne irgendein Problem zugänglich; Wenn ich jedoch versuche, über die Host-URL (nginx ist Host-Host mit Port 9999) mit localhost: 9999 zuzugreifen, kann ich auf die nginx-Seite zugreifen, aber alle app-URLs oder/admin/uri werden mit einem 404-Fehler angezeigt.

Ich habe Tonnen von Foren und Stackoverflow Antworten ohne Glück durchgelaufen, könnte mir bitte jemand helfen, dies zu lösen?

Weitere Informationen unten angehängt:

meine Docker compose Datei sieht aus wie folgt:

version: '2' 
services: 
    nginxlb: 
    build: ./nginx 
    ports: 
     - "9999:80" 
    links: 
     - my-app1:my-app1 
     - my-app2:my-app2 
     - my-app3:my-app3 
    volumes: 
     - ./logs/nginx/:/opt/my-logs/nginx/ 
    my-app1: 
    build: ./my 
    expose: 
     - 8080 
     - 8081 
    volumes: 
     - ./logs/node1:/opt/my-logs/node1/ 
    my-app2: 
    build: ./my 
    volumes: 
     - ./logs/node2/:/opt/my-logs/node2/ 
    expose: 
     - 8080 
     - 8081 
    my-app3: 
    build: ./my 
    volumes: 
     - ./logs/node3:/opt/my-logs/node3 
    expose: 
     - 8080 
     - 8081 

Website-fähigen conf für nginx sieht wie folgt aus:

upstream node-app { 
     least_conn; 
     server my-app1:8080; 
     server my-app2:8080; 
     server my-app3:8080; 
} 

server { 
     listen 80 default; 
     server_name _; 
     location/{ 
     proxy_pass http://node-app; 
     include /etc/nginx/uwsgi_params; 
     } 
} 

EDIT diese ist meine Docker-Datei für NGINX Ich habe keine Änderungen an der Standard-Datei nginx.conf

012 vorgenommen
From nginx 

MAINTAINER DevOps 

# Update the container 
RUN apt-get update 

# Create directories and set working directory 
RUN mkdir /opt/myapp/ 
RUN mkdir /opt/myapp/django-static/ 
RUN mkdir /opt/myapp/django-media/ 
RUN mkdir /opt/myapp/webroot/ 
run mkdir -p /opt/myapp-logs/nginx/ 
WORKDIR /opt/myapp/ 

# Copy configs and code to Container 
ADD config/nginx.conf /etc/nginx/nginx.conf 
ADD config/nginx-site.conf /etc/nginx/sites-enabled/nginx.conf 
ADD config/uwsgi_params /etc/nginx/uwsgi_params 

EXPOSE 80 
+0

404 schlägt vor, nginx Ihren 'server' nginx Konfigurationsblock nicht erreicht; Vielleicht überschreiben Parameter in der Standard-Nginx-Konfigurationsdatei Ihre Konfiguration? Hast du versucht es zu löschen? Wenn das nicht hilft, poste bitte den Inhalt deiner nginx/Dockerfile. – rafalmp

+0

der nginx-Server dient den uwsgi-Inhalt beim Zugriff über die Nginx-Container-IP (erhalten durch "sudo docker inspect | grep IPAddress". – user2693188

+0

gerade meine nginx Dockerfile hinzugefügt, denke ich, ob ich die Docker-Vernetzung direkt mit der Datei verfassen .. – user2693188

Antwort

1

Nginx Konfigurationsdatei für die Standardsite enthält Zeile:

server_name localhost; 

so dass diese Konfiguration verwendet wird, wenn Sie zu http://localhost:9999 gehen; zusätzlich - nginx verarbeitet das /etc/nginx/sites-enabled Verzeichnis und seinen Inhalt nicht; von dem Standard nginx.conf:

include /etc/nginx/conf.d/*.conf; 

Ihre Dockerfile ändern - statt:

ADD config/nginx-site.conf /etc/nginx/sites-enabled/nginx.conf 

Verwendung:

RUN rm /etc/nginx/conf.d/default.conf 
ADD config/nginx-site.conf /etc/nginx/conf.d/nginx.conf 
+0

Großartig, es hat funktioniert, vielen Dank – user2693188