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:
- Überprüfen des Zustands von Containern und Netzwerken
- Verwendung von Netzwerk-Utilities innerhalb der Container
- Überprüfen der Docker- und Netzwerk-Configurationsdateien
- Überprüfen der Docker-Systemlogs
- 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
:
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:
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:
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
:
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:
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:
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.
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:
{
"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:
journalctl -u docker.service
Anzeigen der Container-Logs
Die Logs der Container können ebenfalls bei der Diagnose von Netzwerkproblemen helfen:
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.
docker network inspect <network_name>
Beispielausgabe des Befehls docker network inspect
[
{
"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:
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:
version: '3.8'
services:
web:
image: nginx:latest
dns:
- 8.8.8.8
Überprüfung des DNS
im Container:
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:
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:
docker network inspect <network_name>
Änderung des Subnetzes:
docker network create --subnet=192.168.2.0/24 my_network
GO TO FULL VERSION