9.1 Tools und Befehle zum Debugging
Docker Compose macht es viel einfacher, Multi-Container-Anwendungen zu entwickeln und bereitzustellen, aber wie bei jeder Technologie können Probleme auftreten, die Debugging und Lösungsansätze erfordern. In dieser Vorlesung schauen wir uns die grundlegenden Ansätze und Tools zur Fehlersuche und zum Debugging von Anwendungen in Docker Compose an.
Hauptprobleme und Ansätze zu ihrer Lösung:
- Probleme beim Starten von Containern:
- Überprüfung der Container-Logs.
- Überprüfung des Container-Status.
- Überprüfung der Konfigurationsdateien.
- Netzwerkprobleme:
- Überprüfung der Netzwerkverbindungen.
- Verwendung von Netzwerk-Tools innerhalb der Container.
- Probleme mit Volumes:
- Überprüfung der Volume-Mounts.
- Überprüfung der Zugriffsrechte auf Volumes.
Tools und Befehle zum Debugging:
1. Anzeigen der Container-Logs
Container-Logs sind der erste Ort, an den du dich wenden solltest, wenn Probleme auftreten. Der Befehl docker compose logs
ermöglicht das Anzeigen der Logs aller in compose.yaml
definierten Services.
docker compose logs
Du kannst einen bestimmten Service angeben, um dessen Logs anzuzeigen:
docker compose logs <service_name>
2. Überprüfung des Container-Status
Der Befehl docker compose ps
zeigt Informationen über den Status aller Container, die von Docker Compose verwaltet werden.
docker compose ps
Die Ausgabe dieses Befehls zeigt den Status, die Ports und die Container-IDs.
3. Neustart von Containern
Wenn ein Container nicht korrekt funktioniert, versuche ihn neu zu starten:
docker compose restart <service_name>
4. Verbindung zu einem laufenden Container
Für eine detailliertere Untersuchung des Problems kannst du dich mit dem Befehl docker compose exec
mit einem laufenden Container verbinden.
docker compose exec <service_name> /bin/bash
Dieser Befehl öffnet ein Terminal innerhalb des Containers, was es ermöglicht, Diagnosebefehle auszuführen.
5. Verwendung von Netzwerk-Tools
Die Überprüfung der Netzwerkverbindungen innerhalb der Container kann helfen, Netzwerkprobleme zu diagnostizieren. Du kannst Tools wie ping, curl, netcat und andere verwenden.
docker compose exec <service_name> ping <hostname>
docker compose exec <service_name> curl http://<hostname>
docker compose exec <service_name> netcat -z -v <hostname> <port>
9.2 Fortgeschrittene Ansätze
Weitere Ansätze zur Fehlerbehebung
1. Überprüfung der Docker Compose Datei
Fehler in der Datei compose.yaml
können zu einer fehlerhaften Ausführung der Container führen. Überprüfe die Syntax der Datei mit folgendem Befehl:
docker compose config
Dieser Befehl überprüft die Datei auf Fehler und zeigt die endgültige Konfiguration an.
2. Nutzung von Healthcheck
Du kannst einen Healthcheck für Services in compose.yaml
definieren, damit Docker den Zustand der Container automatisch überprüfen kann.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
interval: 30s
timeout: 10s
retries: 3
3. Überprüfung der Volumes-Mounts
Probleme mit Volumes können durch falsches Mounten oder unzureichende Zugriffsrechte verursacht werden. Stelle sicher, dass Volumes korrekt gemountet sind und die Container darauf zugreifen können.
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
3.1 Überprüfung der Verfügbarkeit eines Volumes
Um die Verfügbarkeit eines Volumes aus dem Container zu überprüfen, kannst du einen Container starten und einen Befehl ausführen, der die Existenz des Volumes prüft (z. B. eine Liste der im Volume vorhandenen Dateien). Angenommen, das Volume ist im Container unter /mnt/volume gemountet:
docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume
Wenn das Volume verfügbar ist, zeigt der Befehl ls
eine Liste der Dateien und Verzeichnisse im Volume an. Wenn das Volume nicht verfügbar oder leer ist, erhältst du eine entsprechende Nachricht.
3.2 Überprüfung des freien Speicherplatzes im Volume
Um den verfügbaren Speicherplatz im Volume von innerhalb des Containers zu überprüfen, verwende den Befehl df
:
docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume
Dieser Befehl zeigt den verfügbaren Speicherplatz im Dateisystem, auf dem das Volume gemountet ist. Die Option -h
zeigt die Informationen in einem leserfreundlichen Format (z. B. mit Einheiten wie MB, GB usw.).
4. Nutzung einer IDE
Verwende eine IDE mit Debug-Funktionen und Logging, um das Debuggen zu erleichtern. Du kannst separate Konfigurationsdateien für Entwicklung und Produktion erstellen, indem du den Parameter --file
nutzt.
docker compose --file docker-compose.dev.yml up
Wichtig!
Hier findest du eine nützliche Anleitung zur Einrichtung des Remote Debuggings einer Anwendung, die in Docker läuft, mit IntelliJ IDEA: Einrichtung von Remote Debugging .
5. Überprüfung von Umgebungsvariablen
Falsche oder fehlende Umgebungsvariablen können Probleme verursachen. Stelle sicher, dass alle benötigten Variablen in der Datei .env
oder direkt in compose.yaml
angegeben sind.
version: '3.8'
services:
app:
image: myapp:latest
environment:
- APP_ENV=development
- DEBUG=true
9.3 Beispiele für Debugging-Befehle
Beispiele zur Nutzung von Befehlen beim Debugging
Beispiel 1: Überprüfung und Behebung eines Fehlers bei der Verbindung zur Datenbank
Logs des Dienstes web
anzeigen:
docker compose logs web
Überprüfung der Netzwerkverbindung zwischen web
und db
:
docker compose exec web ping db
docker compose exec web curl http://db:5432
Verbindung zum Container web
zur Diagnose herstellen:
docker compose exec web /bin/bash
Beispiel 2: Überprüfung von Problemen mit Volumes
Überprüfung der Volumes-Mounts:
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Verbindung zum Container db
herstellen und Daten überprüfen:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION