149 lines
4.8 KiB
Markdown
149 lines
4.8 KiB
Markdown
# Docker-Compose Fehler Behebung - Vollständige Lösung
|
|
|
|
## Problemübersicht
|
|
Die folgenden Fehler wurden beim Ausführen der docker-compose Befehle identifiziert und behoben:
|
|
|
|
1. **Network-Konfigurationsfehler**: `meldestelle-network declared as external, but could not be found`
|
|
2. **ContainerConfig KeyError**: Fehler beim Inspizieren bestehender Container
|
|
3. **API Gateway Service-Fehler**: `Service api-gateway has neither an image nor a build context specified`
|
|
4. **Deploy Resource Warnings**: Unsupported `reservations.cpus` sub-keys
|
|
|
|
## 🔧 Angewendete Lösungen
|
|
|
|
### 1. Network-Konfiguration korrigiert ✓
|
|
**Problem**: Inkonsistente Network-Definitionen zwischen compose-Dateien
|
|
- `docker-compose.yml`: `driver: bridge`
|
|
- `docker-compose.services.yml` und `docker-compose.clients.yml`: `external: true`
|
|
|
|
**Lösung**:
|
|
- Entfernung von `external: true` aus allen compose-Dateien
|
|
- Einheitliche Verwendung von `driver: bridge`
|
|
|
|
### 2. ContainerConfig KeyError behoben ✓
|
|
**Problem**: Korrupte Container-Metadaten von vorherigen Runs
|
|
**Lösung**:
|
|
- Bereinigung aller bestehenden Container
|
|
- Befehl: `docker rm $(docker ps -a -q --filter "name=meldestelle")`
|
|
|
|
### 3. API Gateway Service-Konfiguration ✓
|
|
**Problem**: `docker-compose.override.yml` referenziert Services, die nicht in der Basis-Konfiguration definiert sind
|
|
**Lösung**:
|
|
- Korrekte Verwendung der compose-Datei-Kombinationen
|
|
- `docker-compose.override.yml` nur zusammen mit `docker-compose.services.yml` verwenden
|
|
|
|
### 4. Deploy Resource Warnings eliminiert ✓
|
|
**Problem**: Docker Compose 1.29.2 unterstützt keine `reservations` unter `deploy.resources`
|
|
**Lösung**:
|
|
- Entfernung aller `reservations` Sektionen aus `docker-compose.services.yml`
|
|
- Beibehaltung der `limits` Konfigurationen
|
|
|
|
## ✅ Korrekte Docker-Compose Befehle
|
|
|
|
### Vorbereitung (einmalig nach Fehlern)
|
|
```bash
|
|
# Zum richtigen Verzeichnis wechseln
|
|
cd /home/stefan-mo/WsMeldestelle/Meldestelle
|
|
|
|
# Bestehende Container bereinigen (falls ContainerConfig Fehler auftreten)
|
|
docker rm $(docker ps -a -q --filter "name=meldestelle") 2>/dev/null || true
|
|
|
|
# Verwaiste Images bereinigen (optional)
|
|
docker image prune -f
|
|
```
|
|
|
|
### 1. Alle Services einschließlich Clients
|
|
```bash
|
|
docker-compose \
|
|
-f docker-compose.yml \
|
|
-f docker-compose.services.yml \
|
|
-f docker-compose.clients.yml \
|
|
up -d
|
|
```
|
|
|
|
### 2. Nur Infrastructure für Backend-Entwicklung
|
|
```bash
|
|
docker-compose -f docker-compose.yml up -d postgres redis kafka consul zipkin
|
|
```
|
|
|
|
### 3. Mit Debug-Unterstützung für Service-Entwicklung
|
|
```bash
|
|
DEBUG=true SPRING_PROFILES_ACTIVE=docker \
|
|
docker-compose -f docker-compose.yml -f docker-compose.services.yml up -d
|
|
```
|
|
|
|
### 4. Mit Live-Reload für Frontend-Entwicklung
|
|
```bash
|
|
# WICHTIG: Nur verwenden wenn docker-compose.services.yml ebenfalls geladen wird
|
|
docker-compose \
|
|
-f docker-compose.yml \
|
|
-f docker-compose.services.yml \
|
|
-f docker-compose.override.yml \
|
|
up -d
|
|
```
|
|
|
|
## 🚨 Wichtige Hinweise
|
|
|
|
### Override-Datei Verwendung
|
|
- `docker-compose.override.yml` darf **NICHT** allein mit `docker-compose.yml` verwendet werden
|
|
- Grund: Override definiert nur Konfigurationsüberschreibungen, keine vollständigen Services
|
|
- **Richtig**: `-f docker-compose.yml -f docker-compose.services.yml -f docker-compose.override.yml`
|
|
- **Falsch**: `-f docker-compose.yml -f docker-compose.override.yml`
|
|
|
|
### Network-Konsistenz
|
|
- Alle compose-Dateien verwenden jetzt `driver: bridge` für `meldestelle-network`
|
|
- Keine `external: true` Deklarationen mehr vorhanden
|
|
- Network wird automatisch von Docker Compose erstellt
|
|
|
|
### Resource-Limits
|
|
- Nur `limits` werden verwendet (memory, cpus)
|
|
- `reservations` wurden entfernt (nicht unterstützt in Docker Compose 1.29.2)
|
|
- Services starten ohne Warnings
|
|
|
|
## 🔍 Fehlerbehebung
|
|
|
|
### Bei "ContainerConfig" Fehlern:
|
|
```bash
|
|
docker rm $(docker ps -a -q --filter "name=meldestelle") 2>/dev/null || true
|
|
docker-compose down --volumes --remove-orphans 2>/dev/null || true
|
|
```
|
|
|
|
### Bei Network-Fehlern:
|
|
```bash
|
|
docker network ls | grep meldestelle
|
|
docker network rm meldestelle-network 2>/dev/null || true
|
|
```
|
|
|
|
### Bei Build-Fehlern:
|
|
```bash
|
|
docker-compose build --no-cache --pull
|
|
```
|
|
|
|
## 🧪 Verifikation
|
|
|
|
### Status prüfen:
|
|
```bash
|
|
docker-compose ps
|
|
docker network ls | grep meldestelle
|
|
```
|
|
|
|
### Logs überwachen:
|
|
```bash
|
|
docker-compose logs -f [service-name]
|
|
```
|
|
|
|
### Services stoppen:
|
|
```bash
|
|
docker-compose down
|
|
# Mit Volumes entfernen:
|
|
docker-compose down -v
|
|
```
|
|
|
|
## ✅ Zusammenfassung
|
|
- ✅ Network-Konfiguration vereinheitlicht
|
|
- ✅ ContainerConfig-Fehler durch Container-Cleanup behoben
|
|
- ✅ API Gateway Service-Konfiguration korrigiert
|
|
- ✅ Deploy Resource Warnings eliminiert
|
|
- ✅ Korrekte Verwendung der compose-Datei-Kombinationen dokumentiert
|
|
|
|
Alle ursprünglichen Fehler wurden behoben. Die docker-compose Befehle sollten nun ohne Fehler oder Warnings ausgeführt werden können.
|