mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 10:42:57 +00:00
166 lines
3.8 KiB
Markdown
166 lines
3.8 KiB
Markdown
# 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).
|