CodeGym /Kurse /Docker SELF /Debugging von Anwendungen in Docker Compose

Debugging von Anwendungen in Docker Compose

Docker SELF
Level 16 , Lektion 3
Verfügbar

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:

  1. Probleme beim Starten von Containern:
    • Überprüfung der Container-Logs.
    • Überprüfung des Container-Status.
    • Überprüfung der Konfigurationsdateien.
  2. Netzwerkprobleme:
    • Überprüfung der Netzwerkverbindungen.
    • Verwendung von Netzwerk-Tools innerhalb der Container.
  3. 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.

Terminal

docker compose logs

Du kannst einen bestimmten Service angeben, um dessen Logs anzuzeigen:

Terminal

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.

Terminal

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:

Terminal

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.

Terminal

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.

Terminal

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:

Terminal

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.

Yaml

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.

Yaml

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:

Terminal

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:

Terminal

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.

Terminal

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.

Yaml

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:

Terminal

docker compose logs web

Überprüfung der Netzwerkverbindung zwischen web und db:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

Verbindung zum Container web zur Diagnose herstellen:

Terminal

docker compose exec web /bin/bash

Beispiel 2: Überprüfung von Problemen mit Volumes

Überprüfung der Volumes-Mounts:

Yaml

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:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
Skalierung von Diensten,  16 уровень,  3 лекция
недоступен
Skalierung von Diensten
Skalierung von Diensten
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION