2016-04-02 15 views
1

Ich muss mehrere WordPress-Container, die alle mit einem einzigen MySQL-Container + Nginx Reverse Proxy verbunden sind, um VIRTUAL_HOSTS einfach zu handhaben.Docker Nginx Reverse Proxy

  • Wordpress (hub.docker.com/_/wordpress/)
  • Mysql (hub.docker: zu tun (nur ein WP mit jetzt) ​​

    Hier ist, was ich versuche. com/_/mysql /)

  • Nginx Reverse Proxy (github.com/jwilder/nginx-proxy)

ich bin auf OSX arbeiten, und das ist, was ich auf dem Terminal laufen:

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy 
docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest 
docker run -e VIRTUAL_HOST=wordpress.mylocal.com --name wordpress --link some-mysql:mysql -p 8080:80 -d wordpress 

Mein Docker läuft auf 192.168.99.100 und das bringt mich zu einem 503 nginx/1.9.12 Fehler ofc.

Dann bringt 192.168.99.100:8080 mich zum WordPress wie erwartet.

Aber http://wordpress.mylocal.com es funktioniert nicht; es wird nicht auf 192.168.99.100:8080 umgeleitet und ich verstehe nicht, was ich falsch mache.

Irgendwelche Vorschläge? Vielen Dank!

+0

Versuchen ohne Wordpress Belichtung auf sich warten lassen Port 8080 und lasst nginx direkt zum Container routen anstatt den Host zu durchlaufen. – tpbowden

+0

Versucht, ohne 8080 auszugeben, aber immer noch das gleiche Ergebnis :( Wie hier 'github.com/jwilder/nginx-proxy' beschrieben, müssen die Container einen Port freilegen – Kianda

+0

Die Container müssen * einen * Port freisetzen, aber das ist nicht nötig * Veröffentliche sie * (du könntest das '-p 8080: 80' (und' -p 3306: 3306' entfernen, wenn du keine externen Tools verwendest, um dich mit MySQL zu verbinden) Hast du ein Wildcard-DNS-Setup, oder? editiert deine hosts-Datei, um 'wordpress.mylocal.com' aufzulösen als 192.168.99.100? – thaJeztah

Antwort

1

Als allererstes empfehle ich Ihnen, docker-compose zu starten, Ihre Container laufen zu lassen und Fehler zu finden wird viel einfacher.

Wie für Ihren Fall scheint es, dass Sie VIRTUAL_PORT zu Ihrem Container auf 8080

Zweitens kann man nicht zwei Behälter haben (die nginx-Proxy + Wordpress) aufgeraut auf den gleichen Port auf dem Host direkt verwenden sollten .

Viel Glück!

+0

im Grunde können Sie keinen Container auf dem gleichen Port ausführen, als wenn Sie bereits einen laufenden und begrenzt auf dem gleichen Port. – user4860092

+1

Das ist richtig.Das ist, wo der Proxy hilft es kann Ihre re senden Suchen Sie anhand der URL nach dem richtigen Container und leiten Sie ihn mithilfe des Parameters VIRTUAL_PORT an den richtigen Container weiter. –

0

Je nach Ihrem Fall denke ich, dass die beste Lösung für Sie ist, einen Nginx Reverse Proxy zu verwenden, der auf den Docker-Socket wartet und Anforderungen an verschiedene virtuelle Hosts weiterleiten kann.

zum Beispiel, lassen Sie uns sagen, Sie haben 3 WPs.

WP1 -> port binding to 81:80 
WP2 -> port binding to 82:80 
WP3 -> port binding to 83:80 

für jede von ihnen sollten Sie eine Docker-Umgebungsvariable mit dem virtuellen Hostnamen verwenden, den Sie verwenden möchten.

WP1-> foo.bar1 
WP2-> foo.bar2 
WP3-> foo.bar3 

Nach tun sollten Sie haben 3 differnt WP mit freiliegenden Anschlüsse auf 81 82 83.

Jetzt herunterladen und starten Sie dieses nginx Docker Behälter (Reverse-Proxy) here es auf der Docker Buchse hören sollte und reaktiviert alle Daten, die auf Ihrem Rechner an Port 80 ankommen. und wenn Sie den WP-Container gestartet haben und durch die von Ihnen angegebene Umgebungsvariable wird er erkennen können, welche Anfrage an welche WP-Instanz gesendet werden soll ...

Dies ist ein Beispiel dafür, wie man von euch laufen soll Bilder

> docker run -e VIRTUAL_HOST=foo.bar1.com -p 81:80 -d wordpres:tag 

In diesem Fall Andockfenster WP der virtuelle Host wird der virtuelle Host aus der HTTP-Anforderung

Verwandte Themen