Leiten Sie die Subdomain mithilfe von NGINX zum Docker-Container um

612
Shovalt

Ich habe NGINX auf Centos 7.5 eingerichtet, Port 80 abgehört und den Verkehr an einen Gunicorn-Server geleitet. Dies ist der Hauptzweck dieses Servers. Dies sind lokal installierte Anwendungen, bisher keine Container.

Nun möchte ich einige Dienste in Docker-Containern ausführen und verschiedene Subdomains (oder auch Ports) verwenden, um den Datenverkehr auf die entsprechenden Container umzuleiten.

Ein spezielles Beispiel - SVN-Server

Ich bin mit dem gesamten Docker-Konzept noch nicht vertraut, und das Fehlen einer spezifischen Dokumentation für einige Container verwirrt mich wirklich. Mit diesem SVN-Server-Container konnte ich einige Fortschritte erzielen . Dies ist der Befehl, den ich benutze: docker run -d --name svn-server -p 80:80 -p 3960:3960 -v /home/svn:/home/svn elleflorio/svn-server

Das habe ich bisher:

  • Der SVN-Server ist über http: // mysite / svn (Port 80) erreichbar.
  • Der Container wird erfolgreich an das lokale Verzeichnis gebunden, und die Repository-Daten bleiben auch dann erhalten, wenn der Container gelöscht wird.
  • Ich kann innerhalb des Containers Befehle ausführen, Benutzer erstellen und Repositorys hinzufügen.

Das sind die Probleme:

  • Ich musste NGINX stoppen, da er auch Port 80 benötigt.
  • Bisher war es noch nicht erfolgreich, den Container an einem anderen Port auszuführen. Es funktionierte nicht, als ich einfach versuchte, den -pParameter zu ändern . Ich habe versucht, SELinux vorübergehend zu deaktivieren, was nicht geholfen hat.
  • Wenn ich den Container an einem anderen Port ausführen könnte, könnte ich den Verkehr von einer Subdomäne zu diesem Port umleiten, aber ich bin sicher, dass es eine bessere Vorgehensweise ist, mit Docker-Containern zu arbeiten.
  • Wenn es mir gelingt, dies zum Laufen zu bringen - wie stelle ich sicher, dass der Container beim Neustart des Hosts neu gestartet wird?
1
Nicht sicher über den Docker-Teil, aber der Titel der Frage fordert nach einer normalen "Reverse-Proxy" -Nginx-Konfiguration. grawity vor 5 Jahren 0
@grawity, ich bin nicht sehr fließend mit der Fachsprache. Ich bin mit dem Satz ein wenig vertraut, war mir aber nicht sicher, ob er hier angebracht war. Shovalt vor 5 Jahren 0

1 Antwort auf die Frage

0
xenoid

Verwenden Sie, um für Ihren Container den Port 8080 anstelle des veröffentlichten Port 80 zu verwenden docker run ... -p 8080:80 .... Die erste Nummer ist der Port, zu dem Sie auf dem Host eine Verbindung herstellen können. Die zweite Nummer ist der "native" Port des Containers. Diese : -Konvention wird an anderer Stelle verwendet.

Stellen Sie sicher, dass Sie den aktuellen Container gestoppt haben ( docker psum die Liste der aktiven Container aufzulisten). Andernfalls wird ein längerer Container mit Port 80 verwendet.

Um den Container beim Booten neu zu starten, können Sie einen systemd-Dienst erstellen, der eine docker run ....

Könnten Sie bitte die Annotation `-p [port1]: [port2]` erläutern? Bezieht sich der erste auf den Host und der zweite auf den Container? Shovalt vor 5 Jahren 0
Ja, die erste Nummer ist der Port, zu dem Sie auf dem Host eine Verbindung herstellen können. Die zweite Nummer ist der "native" Port des Containers. Diese : -Konvention wird an anderer Stelle (Volumes ...) verwendet. xenoid vor 5 Jahren 0
Danke @xenoid, das funktioniert. Ich habe Ihren Kommentar zur Antwort selbst hinzugefügt. Shovalt vor 5 Jahren 0