mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-04 18:52:56 +00:00
dev day #80
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
# 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).
|
||||
Reference in New Issue
Block a user