Add .dockerignore and Docker cleanup script to fix build space issues
- 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.
This commit is contained in:
66
.dockerignore
Normal file
66
.dockerignore
Normal file
@@ -0,0 +1,66 @@
|
||||
# Dependencies
|
||||
node_modules
|
||||
npm-debug.log
|
||||
yarn-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# Next.js build outputs
|
||||
.next
|
||||
out
|
||||
build
|
||||
|
||||
# Environment files
|
||||
.env
|
||||
.env.local
|
||||
.env*.local
|
||||
|
||||
# Git
|
||||
.git
|
||||
.gitignore
|
||||
|
||||
# IDE
|
||||
.vscode
|
||||
.idea
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Hördle specific - WICHTIG: Upload-Dateien NICHT ins Image kopieren!
|
||||
# Diese werden als Volume gemountet und sollten nicht im Image sein
|
||||
/public/uploads/*
|
||||
!/public/uploads/.gitkeep
|
||||
|
||||
# Database files - werden als Volume gemountet
|
||||
/data/*
|
||||
*.db
|
||||
*.db-journal
|
||||
*.db-wal
|
||||
*.db-shm
|
||||
|
||||
# Backups
|
||||
/backups
|
||||
|
||||
# Docker files (nicht notwendig im Image)
|
||||
docker-compose*.yml
|
||||
Dockerfile*
|
||||
.dockerignore
|
||||
|
||||
# Documentation
|
||||
*.md
|
||||
!README.md
|
||||
|
||||
# Scripts die nicht im Container gebraucht werden
|
||||
scripts/fix-*.sh
|
||||
scripts/check-*.sh
|
||||
scripts/debug-*.sh
|
||||
scripts/quick-*.sh
|
||||
|
||||
# Temporary files
|
||||
*.tmp
|
||||
*.temp
|
||||
*.log
|
||||
|
||||
106
DOCKER_BUILD_FIX.md
Normal file
106
DOCKER_BUILD_FIX.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# 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
|
||||
```
|
||||
|
||||
71
scripts/docker-cleanup.sh
Executable file
71
scripts/docker-cleanup.sh
Executable file
@@ -0,0 +1,71 @@
|
||||
#!/bin/bash
|
||||
# Docker Cleanup-Skript
|
||||
# Räumt nicht verwendete Docker-Images, Container, Volumes und Build-Cache auf
|
||||
|
||||
set -e
|
||||
|
||||
echo "🧹 Docker Cleanup..."
|
||||
echo ""
|
||||
|
||||
# Zeige aktuellen Speicherverbrauch
|
||||
echo "📊 Aktueller Docker-Speicherverbrauch:"
|
||||
docker system df
|
||||
echo ""
|
||||
|
||||
# Frage nach Bestätigung (falls interaktiv)
|
||||
if [ -t 0 ]; then
|
||||
echo "⚠️ Dies wird folgende Ressourcen entfernen:"
|
||||
echo " - Alle nicht verwendeten Images"
|
||||
echo " - Alle gestoppten Container"
|
||||
echo " - Alle nicht verwendeten Netzwerke"
|
||||
echo " - Build-Cache"
|
||||
echo ""
|
||||
echo "Möchtest du fortfahren? (j/n)"
|
||||
read -r response
|
||||
if [ "$response" != "j" ] && [ "$response" != "J" ]; then
|
||||
echo "❌ Abgebrochen."
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 1. Entferne gestoppte Container
|
||||
echo "🗑️ Entferne gestoppte Container..."
|
||||
STOPPED_CONTAINERS=$(docker ps -a -q -f status=exited | wc -l)
|
||||
if [ "$STOPPED_CONTAINERS" -gt 0 ]; then
|
||||
docker container prune -f
|
||||
echo "✅ Gestoppte Container entfernt"
|
||||
else
|
||||
echo " Keine gestoppten Container gefunden"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 2. Entferne nicht verwendete Images
|
||||
echo "🗑️ Entferne nicht verwendete Images..."
|
||||
docker image prune -a -f
|
||||
echo "✅ Nicht verwendete Images entfernt"
|
||||
echo ""
|
||||
|
||||
# 3. Entferne nicht verwendete Netzwerke
|
||||
echo "🗑️ Entferne nicht verwendete Netzwerke..."
|
||||
docker network prune -f
|
||||
echo "✅ Nicht verwendete Netzwerke entfernt"
|
||||
echo ""
|
||||
|
||||
# 4. Entferne Build-Cache (optional, kann lange dauern)
|
||||
echo "🗑️ Entferne Build-Cache..."
|
||||
docker builder prune -f
|
||||
echo "✅ Build-Cache entfernt"
|
||||
echo ""
|
||||
|
||||
# Zeige neuen Speicherverbrauch
|
||||
echo "📊 Neuer Docker-Speicherverbrauch:"
|
||||
docker system df
|
||||
echo ""
|
||||
|
||||
# Zeige verfügbaren Speicherplatz
|
||||
echo "💾 Verfügbarer Speicherplatz:"
|
||||
df -h / | tail -1 | awk '{print " Gesamt: " $2 ", Verfügbar: " $4 ", Belegt: " $5}'
|
||||
echo ""
|
||||
|
||||
echo "✅ Cleanup abgeschlossen!"
|
||||
|
||||
Reference in New Issue
Block a user