- Alle Markdown-Dateien (außer README.md) nach docs/ verschoben - Referenzen in README.md aktualisiert - /docs zu .dockerignore hinzugefügt
2.4 KiB
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