Files
hoerdle/docs/DOCKER_BUILD_FIX.md
Hördle Bot e3a09864a6 Refactor: Dokumentation nach docs/ verschoben
- Alle Markdown-Dateien (außer README.md) nach docs/ verschoben
- Referenzen in README.md aktualisiert
- /docs zu .dockerignore hinzugefügt
2025-12-01 17:58:32 +01:00

2.4 KiB

Docker Build Fix: Upload-Dateien ausschließen

Problem

Der Docker Build schlug fehl mit:

no space left on device

Ursache: Die großen MP3-Dateien in public/uploads/ wurden in den Build-Context kopiert und verbrauchten zu viel Speicherplatz.

Lösung

Eine .dockerignore Datei wurde erstellt, die folgende Dateien/Ordner vom Build ausschließt:

  • public/uploads/* - Upload-Dateien (werden als Volume gemountet)
  • data/* - Datenbank-Dateien (werden als Volume gemountet)
  • node_modules - werden während des Builds installiert
  • .next, out, build - Build-Artefakte
  • Backup-Dateien, Logs, temporäre Dateien

Zusätzliche Maßnahmen

Falls der Build weiterhin Probleme macht:

1. Docker aufräumen

# Entferne nicht verwendete Images
docker image prune -a

# Entferne nicht verwendete Container
docker container prune

# Entferne nicht verwendete Volumes (VORSICHT: kann Daten löschen!)
docker volume prune

# Kompletter Cleanup (alles außer laufenden Containern)
docker system prune -a

2. Speicherplatz prüfen

# Zeige Speicherplatz
df -h

# Zeige Docker-Speicherverbrauch
docker system df

# Zeige größte Images
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k3 -h

3. Build-Kontext prüfen

# Prüfe was in den Build-Context kopiert wird
docker build --no-cache --progress=plain -t test-build . 2>&1 | grep "transferring context"

4. Upload-Dateien manuell ausschließen

Falls die .dockerignore nicht greift, können Upload-Dateien vorübergehend verschoben werden:

# Vor dem Build
mv public/uploads public/uploads.backup
mkdir -p public/uploads
touch public/uploads/.gitkeep

# Build durchführen
docker compose build

# Uploads wiederherstellen
rm -rf public/uploads
mv public/uploads.backup public/uploads

Wichtig

Die Upload-Dateien werden nicht ins Docker-Image kopiert, sondern als Volume gemountet:

volumes:
  - ./public/uploads:/app/public/uploads

Das bedeutet:

  • Upload-Dateien bleiben auf dem Host-System
  • Sie werden zur Laufzeit gemountet
  • Sie sollten nicht ins Image kopiert werden (spart viel Speicher)

Verifikation

Nach dem Build sollte das Image deutlich kleiner sein:

# Zeige Image-Größe
docker images hoerdle-hoerdle

# Prüfe ob Uploads im Image sind
docker run --rm hoerdle-hoerdle ls -lh /app/public/uploads
# Sollte nur .gitkeep oder Covers zeigen, keine MP3-Dateien