Paketverlust bzw. instabiles Netzwerk bei Docker-Services

  • Hallo zusammen,

    ich habe schon länger das Phänomen, dass Verbindungen zu als Docker-Container laufenden Anwendungen kurzzeitig nicht funktionieren bzw. Packet-Loss haben.
    Das Problem äußert sich dann unter anderem in fehlschlagenden Healthchecks.

    Die Eckdaten des NAS sind:

    • DXP4800Plus
    • System Version: 1.16.0.0089
    • Docker App-Version: 1.16.0.0022

    Mein Setup sieht so aus:

    • ich nutze eine virtuelle Bridge auf UGOS-Seite (IP: 192.168.0.5)
    • es gibt eine Traefik-Instanz als Container, die auf Port 80 und 443 lauscht. Der Compose-Service hängt im "proxy" Docker-Network (172.18.0.0/24)
    • alle anderen Anwendungen laufen als separate Compose-Stacks und nutzen das gleiche "proxy" Docker-Network
    • der DNS-Eintrag im lokalen Netz zeigt jeweils immer auf die NAS-IP (192.168.0.5)

    Der Netzwerkverkehr von einem anderen Gerät im LAN sieht also so aus:
    Client-PC -> NAS-IP (192.168.0.5) -> "docker-proxy" Prozess (Listen auf 80/443) -> Traefik-Instanz (172.18.0.1) -> Ziel-Anwendung (172.18.0.2)

    Wenn ich nun in einer Schleife auf die Anwendung zugreife, sehe ich die Probleme nur dann, wenn die NAS-IP im Spiel ist:

    1. von einem Drittgerät (curl -sf --connect-timeout 1 https://app.local): Fehler (request geht gegen 192.168.0.5)
    2. vom NAS selbst (curl -sf --connect-timeout 1 https://app.local): Fehler (request geht gegen 192.168.0.5)
    3. vom Traefik-Container (curl -sf --connect-timeout 1 https://app.local): Fehler (request geht gegen 192.168.0.5)
    4. vom Traefik-Container via SNI-Overwrite (curl -sf --connect-timeout 1 --resolve app.local:443:127.0.0.1 https://app.local): kein Fehler
    5. von einem beliebigen Container im "proxy" Network auf den docker-internen Service und Port: (curl -sf --connect-timeout 1 https://app:9090): kein Fehler
    6. vom Anwendungscontainer auf sich selbst: (curl -sf --connect-timeout 1 https://localhost:9090): kein Fehler

    Lasse ich die fehlschlagenden Tests laufen, sehe ich etwa 10% davon scheitern; die anderen 90% sind erfolgreich.

    Habt ihr ähnliche Erfahrungen und habt eine Idee, woran das liegen kann?

    Viele Grüße!

  • in den Docker Foren gibt es viele Einträge von Dockerproblemen. hast Du mal probiert den Docker damon neu zu starten? Einige berichtene davon, dass bei ihnen dann

    Ich würde mal per ssh folgendes machen:

    docker inspect -f '{{.State.Pid}}' <CONTAINER_NAME_ODER_ID>

    Dadurch erhälst Du die PID des betroffenen Containers.
    Diese kannst Du dann nutzen um mit

    nsenter -t <PID> -n tcpdump -nn -i any

    Den gesamten Neztwerkverkehr aufzuzeichnen. Vielleicht findest Du darin dann Hinweise. Vermuten würde ich persönlich, dass da ein Fehler irgendwo an der bridge auftritt.

    Da fällt mir gerade noch ein zweites Problem ein. Probier mal
    ip -s link show docker0

    Hier solltest Du vor allem auf die Werte bei RX achten. Wenn die Zähler für verworfene Pakete steigen, ist die MTU (Maximum Transmission Unit) des Docker-Netzwerks oft falsch konfiguriert oder der Host stößt an seine Leistungsgrenzen.

    Man kann die MTU für das Standardnetzwerk in der Datei /etc/docker/daemon.json dauerhaft anpassen

    Code
    {
      "mtu": 1500
    }


    Aber wie bei allen Dingen sei vorsichtig mit Deinem Netzwerk und mach nur was Du auch verstehst und notfalls rückgängig machen kannst.

    Signatur ...

    DXP4800Pro
    Windows | Linux | Android | iOS
    Github

  • Ich habe mir das Thema nochmal genauer angeschaut. Auffälligkeiten konnte ich dabei keine finden.

    Ich habe danach alle Container, Images, Netzwerke und Volumes gelöscht und die ganzen Stacks neugestartet. Danach scheint das Problem behoben zu sein. Leider kann ich mir die Ursache noch nicht so ganz erklären...

Participate now!

Join our community with over 10,000 members!

Register yourself now for free to get full access to all content, graphics, downloads and other exclusive features!