Traefik "Gateway Timeout" für Docker-Dienste beheben

English Deutsch

Problem

Wenn die Traefik-Instanz mit Docker-Providern eingerichtet wurde, tritt häufig ein Problem auf, bei dem jeder Dienst, der auf Docker oder docker-compose läuft, nach einigen Sekunden

gateway_timeout_response.txt
Gateway Timeout

(HTTP-Antwort 504) zurückgibt.

Warum tritt das Gateway-Timeout auf?

Dieses Problem wird dadurch verursacht, dass sich die Traefik-Instanz nicht im selben Docker-Netzwerk befindet wie die Container, auf denen die Dienste laufen. Daher ist die IP-Adresse des traefik-Containers durch eine Firewall blockiert und kann nicht auf die IP-Adressen der docker-Container zugreifen.

Es gibt zwei Möglichkeiten, dieses Problem zu beheben.

Bevorzugte Lösung: Host-Networking verwenden

Der Host kann auf alle Docker-Container-IP-Adressen zugreifen. Daher kann der traefik-Container mit network_mode: "host" betrieben werden, sodass er keine separate IP-Adresse in einem separaten Netzwerk erhält, sondern die IP-Adresse und Ports des Hosts direkt verwendet.

Um Host-Networking in einem docker-compose-basierten Setup zu aktivieren, verwenden

docker_compose_traefik.yml
network_mode: "host"

Beispielsweise:

docker_compose_example.yml
services:
    traefik:
        image: "traefik:v2.4.8"
        network_mode: "host"
# [...]

Der Ansatz mit Host-Networking hat auch den zusätzlichen Vorteil, dass der traefik-Durchsatz erhöht wird, da kein Docker-Port-Forwarding erforderlich ist, sondern die Host-Ports (wie Port 80 für HTTP und Port 443 für HTTPS) direkt mit traefik verbunden sind.

Alternative Lösung: traefik zu jedem Docker-Netzwerk hinzufügen

Die Traefik-Instanz kann auch jedem Docker-Netzwerk hinzugefügt werden, in dem sich ein Dienst-Container befindet. Dies funktioniert, aber es muss daran erinnert werden, die traefik-Instanz zu jedem Docker-Container hinzuzufügen. Da dies nicht nur oft viel Arbeit ist (insbesondere wenn viele Dienste mit separaten Netzwerken im Setup laufen)


Check out similar posts by category: Traefik