# Docker-Troubleshooting und Best Practices --- guideline_type: "technology" scope: "docker-troubleshooting" audience: ["developers", "devops", "ai-assistants"] last_updated: "2025-09-13" dependencies: ["docker-overview.md", "docker-architecture.md", "docker-development.md"] related_files: ["docker-compose.yml", "scripts/validate-docker-consistency.sh", "scripts/docker-versions-update.sh"] ai_context: "Troubleshooting common Docker issues, debug commands, and comprehensive best practices" --- ## 🔧 Troubleshooting ### Häufige Probleme und Lösungen #### 🚫 Port-Konflikte ```bash # Überprüfe, welche Ports verwendet werden netstat -tulpn | grep :8080 lsof -i :8080 # Stoppe konfligierende Services docker-compose down sudo systemctl stop apache2 # Falls Apache läuft ``` #### 🐌 Langsame Startup-Zeiten ```bash # Überprüfe Container-Ressourcen docker stats # Health-Check Logs analysieren docker-compose logs ping-service | grep health # Java Startup optimieren export JAVA_OPTS="$JAVA_OPTS -XX:TieredStopAtLevel=1 -noverify" ``` #### 💾 Disk-Space Probleme ```bash # Docker-Cleanup docker system prune -a --volumes docker volume prune # Log-Rotation für Container docker-compose logs --tail=1000 > /dev/null # Truncate logs ``` #### 🌐 Service Discovery Issues ```bash # Consul Status prüfen curl -s http://localhost:8500/v1/health/state/any | jq # Service Registration überprüfen curl -s http://localhost:8500/v1/catalog/services | jq # DNS-Resolution testen docker-compose exec api-gateway nslookup ping-service ``` ### Debug-Kommandos ```bash # Container introspection docker-compose exec SERVICE_NAME sh docker-compose exec postgres psql -U meldestelle -d meldestelle # Live-Monitoring docker-compose top watch -n 1 'docker-compose ps' # Memory und CPU-Usage docker stats $(docker-compose ps -q) # Detailed service logs docker-compose logs -f --tail=50 SERVICE_NAME ``` ## 🎯 AI-Assistenten: Troubleshooting-Schnellreferenz ### Häufige Befehle | Problem | Befehl | Beschreibung | |---------|---------|--------------| | Port belegt | `netstat -tulpn \| grep :` | Port-Nutzung prüfen | | Service startet nicht | `docker-compose logs ` | Service-Logs anzeigen | | Container hängt | `docker stats` | Ressourcenverbrauch | | DNS-Probleme | `docker-compose exec nslookup ` | DNS-Resolution testen | | Disk voll | `docker system prune -a --volumes` | Cleanup durchführen | ### Debug-Workflows #### Service startet nicht 1. `docker-compose ps` - Status prüfen 2. `docker-compose logs ` - Logs analysieren 3. `docker-compose exec sh` - Container inspizieren 4. Health-Check-Endpoint testen #### Performance-Probleme 1. `docker stats` - Ressourcenverbrauch 2. `docker-compose top` - Prozess-Übersicht 3. JVM-Parameter optimieren 4. Resource-Limits anpassen #### Netzwerk-Probleme 1. `docker network ls` - Netzwerke auflisten 2. `docker-compose exec ping ` - Connectivity testen 3. Consul Service-Discovery prüfen 4. DNS-Resolution validieren ## ✅ Best Practices ### 🔐 Security Best Practices 1. **Non-Root Users**: Alle Container laufen mit dedizierten Non-Root-Usern 2. **Minimal Base Images**: Alpine Linux für kleinste Angriffsfläche 3. **Secrets Management**: Externe Secret-Stores für Production 4. **Network Isolation**: Dedizierte Docker-Networks 5. **Regular Updates**: Automatische Security-Updates für Base Images ### ⚡ Performance Best Practices 1. **Multi-Stage Builds**: Minimale Runtime-Images 2. **Layer Caching**: Optimale COPY-Reihenfolge in Dockerfiles 3. **Resource Limits**: Definierte Memory und CPU-Limits 4. **Health Checks**: Proaktive Container-Health-Überwachung 5. **JVM Tuning**: Container-aware JVM-Settings ### 🧹 Wartung Best Practices 1. **Version Pinning**: Explizite Image-Versionen in Production 2. **Backup Strategies**: Automatische Volume-Backups 3. **Log Rotation**: Begrenzte Log-Datei-Größen 4. **Documentation**: Aktuelle README-Dateien pro Service 5. **Testing**: Automatisierte Container-Tests ### 🎯 Zentrale Verwaltung Best Practices #### Single Source of Truth Prinzipien ```bash # ✅ RICHTIG - Zentrale Version-Updates ./scripts/docker-versions-update.sh update java 22 ./scripts/docker-versions-update.sh sync # ❌ FALSCH - Manuelle Bearbeitung von Dockerfiles vim dockerfiles/services/ping-service/Dockerfile # Version hardcoden ``` > **🤖 AI-Assistant Hinweis:** > Verwende immer das zentrale Versionssystem: > - **Updates:** `./scripts/docker-versions-update.sh update ` > - **Validierung:** `./scripts/validate-docker-consistency.sh` > - **Template-Updates:** `./scripts/generate-compose-files.sh` #### Port-Verwaltung Richtlinien 1. **Immer zentrale Port-Registry verwenden**: ```toml # docker/versions.toml - Port-Definitionen [service-ports] new-service = 8089 # Nächster verfügbarer Port ``` 2. **Port-Konflikte vor Deployment prüfen**: ```bash ./scripts/validate-docker-consistency.sh ``` 3. **Port-Ranges einhalten**: - Infrastructure: 8081-8088 - Services: 8082-8099 - Monitoring: 9090-9099 - Clients: 4000-4099 #### Environment-Overrides Standards 1. **Environment-spezifische Konfigurationen nutzen**: ```bash # Development export DOCKER_ENVIRONMENT=development # Production export DOCKER_ENVIRONMENT=production ``` 2. **Konsistente Health-Check-Konfigurationen**: ```toml [environments.production] health-check-interval = "15s" health-check-timeout = "3s" health-check-retries = 3 ``` #### Template-System Richtlinien 1. **Compose-Files aus Templates generieren**: ```bash # Automatische Generierung bevorzugen ./scripts/generate-compose-files.sh # Manuelle Bearbeitung nur bei spezifischen Anpassungen ``` 2. **Service-Kategorien korrekt zuordnen**: - `services/`: Domain-Services (ping, members, horses) - `infrastructure/`: Platform-Services (gateway, auth, monitoring) - `clients/`: Frontend-Anwendungen (web-app, desktop-app) #### Validierung und Konsistenz 1. **Regelmäßige Konsistenz-Prüfungen**: ```bash # Bei jedem Build ./scripts/validate-docker-consistency.sh # In CI/CD Pipeline integrieren ``` 2. **Build-Args Konsistenz**: ```dockerfile # ✅ RICHTIG - Zentrale Referenz ARG GRADLE_VERSION ARG JAVA_VERSION # ❌ FALSCH - Hardcodierte Versionen ARG GRADLE_VERSION=9.0.0 ``` #### IDE-Integration Best Practices 1. **JSON Schema für Validierung aktivieren**: ```json { "yaml.schemas": { "./docker/schemas/versions-schema.json": "docker/versions.toml" } } ``` 2. **Automatisierte Tasks nutzen**: - Docker: Show Versions - Docker: Validate Consistency - Docker: Build All Services ### 🚀 Entwickler-Workflow Best Practices #### Neuen Service hinzufügen ```bash # 1. Port in versions.toml reservieren echo "new-service = 8089" >> docker/versions.toml # 2. Template-basierten Service erstellen ./scripts/generate-compose-files.sh # 3. Dockerfile aus Template erstellen cp dockerfiles/templates/spring-boot-service.Dockerfile \ dockerfiles/services/new-service/Dockerfile # 4. Build-Args und Environment synchronisieren ./scripts/docker-versions-update.sh sync # 5. Konsistenz validieren ./scripts/validate-docker-consistency.sh ``` #### Version-Updates durchführen ```bash # 1. Aktuelle Versionen prüfen ./scripts/docker-versions-update.sh show # 2. Spezifische Version aktualisieren ./scripts/docker-versions-update.sh update java 22 # 3. Alle Build-Args synchronisieren ./scripts/docker-versions-update.sh sync # 4. Services neu bauen docker-compose build --no-cache # 5. System-Tests durchführen docker-compose up -d && make test ``` --- **Navigation:** - [Docker-Overview](./docker-overview.md) - Grundlagen und Philosophie - [Docker-Architecture](./docker-architecture.md) - Container-Services und Struktur - [Docker-Development](./docker-development.md) - Entwicklungsworkflow - [Docker-Production](./docker-production.md) - Production-Deployment - [Docker-Monitoring](./docker-monitoring.md) - Observability