# Docker Build Memory Fix Guide ## Problem Frontend Docker build fails with "ResourceExhausted: cannot allocate memory" during React/webpack build. ## Applied Fixes ### 1. Dockerfile Optimizations ✅ **File:** `frontend/Dockerfile` - Reduced Node memory from 4GB to 2GB (`--max-old-space-size=2048`) - Added Node GC optimizations: `--optimize-for-size --max-semi-space-size=1` - Set `CI=true` to limit webpack parallelism - Added `npm cache clean` before build to free memory ### 2. Docker Compose Updates ✅ **File:** `docker-compose.yml` - Increased frontend memory limit: 512M → 1GB - Increased CPU limit: 1.0 → 2.0 cores - Added `shm_size: 256m` for build stage ## How to Apply ### Method 1: Standard Build (Recommended) ```bash # Clean previous build artifacts docker compose down -v docker system prune -f # Rebuild with new settings docker compose build frontend --no-cache docker compose up -d ``` ### Method 2: If Still Out of Memory #### Option A: Increase Docker Desktop Memory 1. Open Docker Desktop Settings 2. Go to Resources → Advanced 3. Increase Memory to at least **6GB** (recommended 8GB) 4. Click "Apply & Restart" 5. Retry build #### Option B: Build Outside Docker (Fastest) ```bash cd frontend # Install dependencies npm install # Build locally npm run build # Then use the pre-built files with Docker docker compose up -d ``` #### Option C: Use Docker BuildKit with More Memory ```bash # Set Docker BuildKit memory limit export DOCKER_BUILDKIT=1 export BUILDKIT_STEP_LOG_MAX_SIZE=50000000 # Build with explicit memory limit docker buildx build \ --memory 4g \ --memory-swap 6g \ -t myclub-frontend:latest \ ./frontend ``` ## Verification ### Check Build Success ```bash # View build logs docker compose logs frontend # Verify container is running docker compose ps # Test frontend access curl http://localhost:3000 ``` ### Monitor Memory During Build ```bash # In another terminal, watch Docker stats during build docker stats --no-stream ``` ## Troubleshooting ### Error: "Still running out of memory" **Solutions:** 1. **Close other applications** to free system RAM 2. **Increase Docker Desktop memory** to 8GB 3. **Use local build** (Option B above) 4. **Enable swap memory** on your system ### Error: "webpack: Compilation failed" **Solutions:** 1. Check `frontend/package.json` dependencies 2. Clear npm cache: `npm cache clean --force` 3. Delete `node_modules` and reinstall: `rm -rf node_modules && npm install` ### Error: "Cannot find ESLint plugin" This is **expected** - ESLint is disabled during build with `DISABLE_ESLINT_PLUGIN=true` to save memory. ## Performance Tips ### Speed Up Rebuilds ```bash # Use Docker build cache docker compose build frontend # Or parallel builds docker compose build --parallel ``` ### Monitor Build Progress ```bash # Build with verbose output docker compose build frontend --progress=plain ``` ## System Requirements ### Minimum for Docker Build - **RAM:** 6GB available - **CPU:** 2 cores - **Disk:** 5GB free space ### Recommended - **RAM:** 8GB+ available - **CPU:** 4 cores - **Disk:** 10GB+ free space - **SSD:** For faster builds ## Alternative: Pre-built Images If memory is consistently an issue, consider: 1. **Build on CI/CD** (GitHub Actions, GitLab CI) 2. **Use pre-built images** from registry 3. **Build on more powerful machine** and export image ```bash # Export built image docker save myclub-frontend:latest | gzip > frontend-image.tar.gz # Import on target machine docker load < frontend-image.tar.gz ``` ## Summary The applied fixes optimize memory usage during build: - **Reduced memory footprint** from 4GB to 2GB - **Limited parallel processing** to prevent memory spikes - **Cleaned cache** before build - **Increased Docker resources** for build stage Try the standard build first. If it still fails, use Option A (increase Docker memory) or Option B (build locally).