Für die Verwendung von traefik als Reverse-Proxy vor einem Docker-Container, dessen dynamische IP-Adresse sich im Laufe der Zeit ändern kann, kommt traefik mit einem docker backend. Alle Beispiele, die ich für die Einrichtung finden konnte, folgen dem gleichen Muster:traefik reverse-proxy mit docker backend - konfiguriere frontend rules in der traefik-config-datei und nicht über container label
Zuerst traefik in docker
Modus ohne eine zusätzliche Konfigurationsdatei, aktivieren Host-Netzwerk-Modus (optional, damit Traefik alle Docker-Netzwerke auf dem Host zu sehen falls erforderlich) und montieren Sie den Docker Unix-Socket, damit Traefik Container starten und stoppen kann.
docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v /dev/null/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug
Starten Sie dann einen anderen Behälter und stellen Sie zumindest die folgenden labels:
- traefik.backend: "some-Backend-name"
- traefik.frontend.rule: „Host: localhost ; Methode: GET“(oder was auch immer Ihre Regeln sind)
- traefik.port: 80 (oder was auch immer Port Container macht intern)
Beispiel:
docker run --rm --name nginx -l traefik.backend="some-backend-name" -l traefik.frontend.rule="Host: localhost; Method: GET" -l traefik.port="80 nginx
Dann ein curl localhost
tun, kann man in den Protokollen des traefik
Behälter sehen, dass er die Anforderung nahm und an den NGINX Behälter geleitet.
So weit, so gut ... aber ich mag nicht die Tatsache, dass ich meine Reverse-Proxy-Weiterleitungsregeln (zB forward Host: some.host.name zu container xxx) innerhalb der Anwendung selbst konfigurieren muss (Wo meine docker-compose-Dateien beim Einrichten der Container, Labels etc. normalerweise stehen. Stattdessen möchte ich dies von der Anwendung trennen und stattdessen als Teil der Traefik-Konfiguration konfigurieren.
Ist das irgendwie möglich? Was ich versucht wird Weglassen der traefik.frontend.rule
Etikett aus dem Behälter Beispiel nginx und stattdessen montieren Sie die folgende Konfigurationsdatei für traefik
:
[frontends]
[frontends.frontend1]
backend = "some-backend-name"
[frontends.frontend1.routes.test_1]
rule = "Host: localhost; Method: GET"
Der Startbefehl für traefik
wird somit:
docker run --rm -p 80:80 --net=host --name traefik-reverse-proxy -v $PWD/traefik.toml:/etc/traefik/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock traefik --docker --loglevel debug
Doch dies tut scheinbar nicht die Frontend-Regel aus der Konfigurationsdatei mit dem Backend-Label aus dem Nginx-Container anhängen. curl localhost
gibt jetzt einen 404/Not found
Fehler zurück.
Danke für Ihre Eingabe. Wenn Sie dies jedoch versuchen, ist das Ergebnis genau das gleiche. Wenn Sie ein funktionierendes Beispiel dafür finden, lassen Sie es mich wissen. – Dirk