- Add .dockerignore to exclude large upload files from Docker builds - Add docker-cleanup.sh script to free up Docker disk space - Add DOCKER_BUILD_FIX.md documentation for troubleshooting build issues This prevents large MP3 files from being copied into the Docker image, saving significant disk space during builds.
107 lines
2.4 KiB
Markdown
107 lines
2.4 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```bash
|
|
# 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
|
|
```
|
|
|