2016-12-29 6 views
0

Ich habe zwei Container erstellt, auf denen zwei verschiedene Webanwendungen ausgeführt werden. Ich versuche, einen dritten Container zu erstellen, in dem ein Nginx-Proxy die Anfrage abhängig vom Hostnamen an den richtigen Container umleitet. Meine Nginx-Konfiguration sieht korrekt aus, wenn ich das offizielle nginx-Image ausführe und manuell die Standardkonfigurationsdatei mit dem Proxy-Setup im Container ändere.Nginx-Proxy, verknüpft mit anderen Docker-Containern

Meine zwei Web-Anwendungen Container laufen bereits, und ich starten Sie den Proxy-Container wie folgt:

docker run -i -t --link webapp1 --link webapp2 -p 80:80 nginx /bin/bash 

die sauberste Weg zu tun, wie ich glaube, ich würde eine Dockerfile schaffen, den Behälter zu schaffen, und Übergabe der lokalen default.conf-Datei an den Container beim Erstellen.

Dies ist meine nginx Proxy-Konfigurationsdatei:

server { 
    listen  80; 
    server_name www.webapp1.ch; 

    location/{ 
     proxy_pass http://webapp1/; 
    } 
} 

server { 
    listen  80; 
    server_name www.webapp2.ch; 

    location/{ 
     proxy_pass http://webapp2/; 
    } 
} 

und die Proxy-Docker-Datei:

# Set the base image to use to Ubuntu 
FROM nginx:latest 

# Set the file maintainer (your name - the file's author) 
MAINTAINER Me 


# Update the default application repository sources list 
RUN apt-get update && apt-get install -y \ 
     wget \ 
     vim 

RUN rm /etc/nginx/conf.d/default.conf 
COPY default /etc/nginx/conf.d/default.conf 
CMD /etc/init.d/nginx restart 

Aber leider, wenn ich es zu bauen bin versucht, wird der Behälter nicht wissen noch die webapp1 und webapp2 containeradresse/ip, da sie noch nicht verlinkt sind. Ich erhalte diesen Fehler:

Step 7 : RUN /etc/init.d/nginx restart 
---> Running in aef974e80e74 
Restarting nginx: nginx2016/12/29 17:07:17 [emerg] 11#11: host not found in upstream "webapp1" in /etc/nginx/conf.d/default.conf:6 
nginx: [emerg] host not found in upstream "webapp1" in /etc/nginx/conf.d/default.conf:6 
nginx: configuration file /etc/nginx/nginx.conf test failed 

Was mache ich falsch und wäre der beste Ansatz, um es zu beheben?

Antwort

0

Verwenden von Links ist eine legacy Funktion, sollten Sie User defined networks verwenden.

sudo docker network create mynetwork 
docker run -d --network mynetwork -p 80:80 -v /path/to/nginx/config/default.conf:/etc/nginx/conf.d/default.conf nginx 

Dann habe ich meine vor kurzem user defined network in docker run Befehl erstellt.

Eine andere Sache, die ich dort tat, ich mounted meine nginx config statt ein neues Bild für sie zu bauen.

Einer der Vorteile wäre automatisch dns basierend auf Container-Namen in den gleichen benutzerdefinierten Netzwerken.

Nun zurück zu Ihrem nginx Problem:

proxy_pass http://webapp2:port/; 

Ich vermute, Sie alle 3 Container auf dem gleichen Docker Host ausgeführt, sie alle kippen auf port 80 ausgeführt werden, so sollten Sie Ports in Ihren nginx reverse proxy Config bieten .

+0

Vielen Dank Farhad, Ich habe Ihre Antwort überprüft und ich habe es korrigiert, indem Sie ein Netzwerk wie vorgeschlagen erstellen. Es funktioniert jetzt gut – Fab

Verwandte Themen