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