CodeGym /Kurse /Docker SELF /Behebung von Netzwerkproblemen

Behebung von Netzwerkproblemen

Docker SELF
Level 18 , Lektion 2
Verfügbar

8.1 Grundlegende Schritte zur Diagnose von Netzwerkproblemen

Netzwerkprobleme in Docker können aus verschiedenen Gründen auftreten, darunter falsche Netzwerkkonfiguration, DNS-Probleme, IP-Adresskonflikte und mehr. In dieser Vorlesung schauen wir uns die grundlegenden Methoden zur Diagnose und Lösung von Netzwerkproblemen in Docker an.

Falls Netzwerkprobleme auftreten, sollte man folgende Schritte ausführen:

  1. Überprüfen des Zustands von Containern und Netzwerken
  2. Verwendung von Netzwerk-Utilities innerhalb der Container
  3. Überprüfen der Docker- und Netzwerk-Configurationsdateien
  4. Überprüfen der Docker-Systemlogs
  5. Verwendung von Docker-Netzwerk-Kommandos

8.2 Überprüfung des Status von Containern und Netzwerken

Der erste Schritt bei der Diagnose von Netzwerkproblemen ist die Überprüfung des Status von Containern und Netzwerken.

Überprüfung des Containerstatus

Zuerst listen wir alle laufenden Container auf. Dazu verwenden wir den Befehl docker ps:

Terminal

docker ps

Wenn keine Container laufen, könnte dies auf Probleme mit Docker selbst oder mit der Konfiguration der Container hindeuten.

Überprüfung der Netzwerke

Der Befehl docker network ls zeigt alle Netzwerke an, die in Docker erstellt wurden:

Terminal

docker network ls

Stelle sicher, dass das benötigte Netzwerk existiert und die Container damit verbunden sind.

8.3 Verwendung von Netzwerk-Utilities innerhalb von Containern

Netzwerk-Utilities wie ping, curl, netcat (oder nc) und nslookup können helfen, Probleme innerhalb von Containern zu diagnostizieren. Jedes dieser Tools hat einen spezifischen Zweck:

  • ping — ein Tool zur Überprüfung der Erreichbarkeit von Remote-Hosts im Netzwerk durch Senden von ICMP-Anfragen.
  • curl — ein Tool zum Übertragen von Daten über verschiedene Protokolle, häufig zur Überprüfung der Verfügbarkeit von Webservices verwendet.
  • netcat (nc) — ein universelles Tool für die Arbeit mit Netzwerkverbindungen, ermöglicht das Erstellen von TCP/UDP-Verbindungen und das Diagnostizieren der Verfügbarkeit von Ports.
  • nslookup — ein Tool zum Abrufen von Informationen über DNS-Einträge, z. B. zur Überprüfung der Namensauflösung von Containern.

Beispiel für die Verwendung von ping

Verbinde dich mit einem Container und überprüfe die Verbindung zu einem anderen Container oder Service, indem du das Tool ping für das Senden von ICMP-Anfragen verwendest:

Terminal

docker exec -it <container_name> ping <target_container_name_or_ip>

Beispiel für die Verwendung von curl

Überprüfe die Verfügbarkeit eines Webservices innerhalb des Containers mit dem Tool curl:

Terminal

docker exec -it <container_name> curl http://<target_service>

Beispiel für die Verwendung von nslookup

Verwende nslookup, um die DNS-Namensauflösung von Containern zu überprüfen, was bei der Diagnose von Problemen mit Netzwerkservices hilfreich ist:

Terminal

docker exec -it <container_name> nslookup <target_container_name>

Beispiel für die Verwendung von nc host port

Das Tool nc wird zum Debuggen und Diagnostizieren von Netzwerkverbindungen verwendet. Mit dem Befehl nc host port kannst du eine Verbindung zu einem angegebenen Host und Port herstellen, um die Verfügbarkeit des Ports auf dem Zielhost zu überprüfen:

Terminal

docker exec -it <container_name> nc -zv 192.168.1.1 22

8.4 Überprüfung der Docker- und Netzwerkdateikonfiguration

Falsche Konfigurationen von Docker und Netzwerkdateien können Netzwerkprobleme verursachen.

Überprüfung der Datei docker-compose.yml

Stelle sicher, dass die Datei docker-compose.yml korrekt konfiguriert ist und alle Netzwerke, Services und Ports richtig angegeben sind.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - webnet
        
  db:
    image: postgres:latest
    ports:
      - "5432:5432"
    networks:
      - webnet
        
networks:
  webnet:
    driver: bridge

Überprüfung der Datei /etc/docker/daemon.json

Prüfe die Konfiguration von Docker Daemon, falls sie geändert wurde:

JSON

{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "fixed-cidr": "192.168.1.0/24"
}

8.5 Überprüfung der Systemprotokolle von Docker

Die Systemprotokolle von Docker können nützliche Informationen über Netzwerkfehler und Probleme enthalten.

Anzeigen der Docker-Protokolle

Verwende den Befehl journalctl, um Docker-Protokolle auf Systemen mit systemd anzuzeigen:

Terminal

journalctl -u docker.service

Anzeigen der Container-Logs

Die Logs der Container können ebenfalls bei der Diagnose von Netzwerkproblemen helfen:

Terminal

docker logs <container_name>

8.6: Verwendung von Docker-Netzwerkbefehlen

Docker stellt Befehle zur Diagnose und Verwaltung von Netzwerken bereit, wie z. B. docker network inspect und docker network connect.

Befehl docker network inspect

Dieser Befehl ermöglicht es, detaillierte Informationen über das Netzwerk zu erhalten, einschließlich der angeschlossenen Container und IPAM-Einstellungen.

Terminal

docker network inspect <network_name>

Beispielausgabe des Befehls docker network inspect

JSON

[
    {
        "Name": "webnet",
        "Id": "e5e5e1b1a3e5",
        "Created": "2021-01-01T00:00:00.000000000Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Containers": {
            "container_id": {
                "Name": "web",
                "EndpointID": "6c52f8c75c1e",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

Befehl docker network connect

Falls ein Container falsch mit dem Netzwerk verbunden wurde, kannst du ihn manuell verbinden:

Terminal

docker network connect <network_name> <container_name>

8.7 Beispiele für Diagnose und Problemlösungen

Beispiel 1: Probleme mit DNS Namensauflösung von Domainnamen zu IP

Wenn Container keine Hostnamen anderer Container auflösen können, überprüfe die DNS-Einstellungen:

Überprüfung der DNS-Einstellungen in docker-compose.yml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    dns:
      - 8.8.8.8

Überprüfung des DNS im Container:

Terminal

docker exec -it <container_name> cat /etc/resolv.conf

Beispiel 2: Probleme mit dem Zugriff auf Services

Wenn Container keinen Zugriff auf Services auf anderen Hosts haben:

Überprüfung der veröffentlichten Ports:

Terminal

docker ps

Überprüfung der Firewall-Regeln:

Stelle sicher, dass die Firewall-Regeln die benötigten Ports nicht blockieren.

Beispiel 3: IP-Adressenkonflikt

Falls es einen IP-Adressenkonflikt zwischen Containern oder mit dem Host gibt:

Überprüfung des Netzwerk-Subnetzes:

Terminal

docker network inspect <network_name>

Änderung des Subnetzes:

Terminal

docker network create --subnet=192.168.2.0/24 my_network
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION