Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| sidebar_position: 10 | |
| # 🐛 Docker Build Troubleshooting Guide | |
| ## Testing Docker Build Locally | |
| Before deploying to Hugging Face, always test the build locally: | |
| ```bash | |
| # Run comprehensive build test | |
| ./test-huggingface-build.sh | |
| ``` | |
| This script will: | |
| 1. ✅ Build the Docker image | |
| 2. ✅ Check image size (HF has 50GB limit) | |
| 3. ✅ Start the container | |
| 4. ✅ Wait for services to be ready | |
| 5. ✅ Test all endpoints (/, /docs, /api/docs, /api/health) | |
| 6. ✅ Show container logs | |
| ## Common Build Failures | |
| ### 1. **Node.js Build Failures** | |
| **Symptom:** `npm ci` or `npm install` fails during docs build | |
| **Causes:** | |
| - Network timeouts | |
| - Package version conflicts | |
| - Missing dependencies | |
| **Solutions:** | |
| ```dockerfile | |
| # Increase timeouts in Dockerfile.huggingface | |
| RUN npm config set fetch-retry-mintimeout 20000 && \ | |
| npm config set fetch-retry-maxtimeout 120000 && \ | |
| npm ci --prefer-offline --no-audit || npm install --prefer-offline --no-audit | |
| ``` | |
| **Test locally:** | |
| ```bash | |
| cd website | |
| npm ci | |
| npm run build | |
| ``` | |
| ### 2. **Frontend Build Failures** | |
| **Symptom:** `npm run build` fails in frontend directory | |
| **Causes:** | |
| - TypeScript errors | |
| - Missing environment variables | |
| - Vite configuration issues | |
| **Solutions:** | |
| Check build locally: | |
| ```bash | |
| cd frontend | |
| npm ci | |
| npm run build | |
| ``` | |
| Fix TypeScript errors: | |
| ```bash | |
| npm run typecheck | |
| ``` | |
| ### 3. **Python Dependencies Fail** | |
| **Symptom:** `pip install` fails | |
| **Causes:** | |
| - Missing system dependencies | |
| - Incompatible versions | |
| - Network issues | |
| **Solutions:** | |
| Test locally: | |
| ```bash | |
| pip install -r requirements.txt | |
| ``` | |
| Check system dependencies in Dockerfile: | |
| ```dockerfile | |
| RUN apt-get update && apt-get install -y \ | |
| build-essential \ | |
| tesseract-ocr \ | |
| # Add missing dependencies here | |
| && rm -rf /var/lib/apt/lists/* | |
| ``` | |
| ### 4. **Image Size Too Large** | |
| **Symptom:** Image exceeds 50GB limit on Hugging Face | |
| **Solutions:** | |
| Check image size: | |
| ```bash | |
| docker images open-navigator-hf-test --format "{{.Size}}" | |
| ``` | |
| Reduce size: | |
| - Remove unnecessary files in `.dockerignore` | |
| - Use multi-stage builds | |
| - Clean up apt cache: `rm -rf /var/lib/apt/lists/*` | |
| - Remove dev dependencies after build | |
| ### 5. **Services Not Starting** | |
| **Symptom:** Container starts but services don't respond | |
| **Check logs:** | |
| ```bash | |
| docker logs open-navigator-test-container | |
| ``` | |
| **Common issues:** | |
| - Nginx configuration errors | |
| - Port conflicts (7860) | |
| - Missing environment variables | |
| - Supervisor not starting services | |
| **Test nginx config:** | |
| ```bash | |
| docker exec open-navigator-test-container nginx -t | |
| ``` | |
| **Check supervisor status:** | |
| ```bash | |
| docker exec open-navigator-test-container supervisorctl status | |
| ``` | |
| ### 6. **File Copy Errors** | |
| **Symptom:** `COPY` commands fail in Dockerfile | |
| **Causes:** | |
| - Files not in build context | |
| - Incorrect paths | |
| - .dockerignore excluding needed files | |
| **Solutions:** | |
| Check .dockerignore: | |
| ```bash | |
| cat .dockerignore | |
| ``` | |
| Verify files exist: | |
| ```bash | |
| ls -la .huggingface/ | |
| ls -la website/build/ | |
| ``` | |
| ### 7. **Static Files Not Found** | |
| **Symptom:** Frontend or docs return 404 | |
| **Check build output:** | |
| ```bash | |
| # Check if docs built | |
| ls -la static/docs/ | |
| # Check if frontend built | |
| ls -la api/static/ | |
| ls -la static/frontend/ | |
| ``` | |
| **Fix frontend build path:** | |
| ```dockerfile | |
| # Ensure vite.config.ts outputs to correct location | |
| RUN cd /app/frontend && npm run build | |
| # Verify output | |
| RUN ls -la /app/api/static/ | |
| # Copy to nginx location | |
| RUN cp -r /app/api/static/* /app/static/frontend/ | |
| ``` | |
| ## Debugging Steps | |
| ### 1. Build Image Locally | |
| ```bash | |
| docker build -f Dockerfile.huggingface -t test-build . --progress=plain | |
| ``` | |
| The `--progress=plain` flag shows detailed output. | |
| ### 2. Run Container Interactively | |
| ```bash | |
| docker run -it --rm \ | |
| -p 7860:7860 \ | |
| --entrypoint /bin/bash \ | |
| test-build | |
| ``` | |
| Then manually run commands: | |
| ```bash | |
| # Check files | |
| ls -la /app/ | |
| ls -la /app/static/ | |
| # Test nginx config | |
| nginx -t | |
| # Start services manually | |
| supervisord -c /etc/supervisor/conf.d/supervisord.conf | |
| ``` | |
| ### 3. Test Individual Services | |
| ```bash | |
| # Test API directly | |
| python -m uvicorn api.app:app --host 0.0.0.0 --port 8000 | |
| # Test nginx config | |
| nginx -t -c /etc/nginx/nginx.conf | |
| # Test supervisor | |
| supervisorctl status | |
| ``` | |
| ### 4. Check Network Connectivity | |
| ```bash | |
| # Inside container | |
| curl http://localhost:7860/ | |
| curl http://localhost:7860/docs | |
| curl http://localhost:7860/api/docs | |
| curl http://localhost:7860/api/health | |
| ``` | |
| ## Hugging Face Specific Issues | |
| ### 1. **Build Timeout** | |
| HF has build time limits. Optimize: | |
| - Use layer caching effectively | |
| - Minimize npm install time with `npm ci --prefer-offline` | |
| - Pre-download large files | |
| ### 2. **Environment Variables** | |
| Set in HF Space Settings → Variables and secrets: | |
| ```bash | |
| OPENAI_API_KEY=sk-... | |
| ANTHROPIC_API_KEY=sk-ant-... | |
| HUGGINGFACE_TOKEN=hf_... | |
| LOG_LEVEL=INFO | |
| HF_SPACES=1 | |
| ``` | |
| ### 3. **Hardware Requirements** | |
| Docker Spaces require paid hardware: | |
| - Settings → Resource configuration | |
| - Select "CPU Basic" minimum (~$22/month) | |
| ### 4. **Port Configuration** | |
| HF Spaces expect port 7860: | |
| ```dockerfile | |
| EXPOSE 7860 | |
| ``` | |
| ```bash | |
| # In nginx config | |
| listen 7860; | |
| ``` | |
| ## Quick Fixes | |
| ### Reset Everything | |
| ```bash | |
| # Clean Docker | |
| docker system prune -a | |
| docker volume prune | |
| # Rebuild from scratch | |
| docker build --no-cache -f Dockerfile.huggingface -t test-build . | |
| ``` | |
| ### Check Build Context Size | |
| ```bash | |
| # See what's being sent to Docker | |
| docker build -f Dockerfile.huggingface -t test-build . 2>&1 | grep "Sending build context" | |
| ``` | |
| ### Update Dependencies | |
| ```bash | |
| # Update npm packages | |
| cd website && npm update && cd .. | |
| cd frontend && npm update && cd .. | |
| # Update Python packages | |
| pip list --outdated | |
| pip install -U package-name | |
| ``` | |
| ## Getting Help | |
| 1. **Check HF Build Logs:** | |
| - Go to your Space | |
| - Click "Logs" tab | |
| - Look for error messages | |
| 2. **Test Locally First:** | |
| ```bash | |
| ./test-huggingface-build.sh | |
| ``` | |
| 3. **Compare with Working Build:** | |
| - Check git history: `git log --oneline` | |
| - Compare Dockerfiles: `git diff HEAD~1 Dockerfile.huggingface` | |
| 4. **Report Issues:** | |
| - Include build logs | |
| - Include local test results | |
| - Include Docker version: `docker --version` | |
| ## Deployment Workflow | |
| ✅ **Recommended Process:** | |
| ```bash | |
| # 1. Make changes | |
| git add -A | |
| git commit -m "Your changes" | |
| # 2. Test build locally (THIS IS CRITICAL) | |
| ./test-huggingface-build.sh | |
| # 3. If tests pass, deploy | |
| ./deploy-huggingface.sh | |
| # 4. Monitor HF build logs | |
| # Visit: https://huggingface.co/spaces/YOUR_USERNAME/open-navigator-for-engagement | |
| ``` | |
| ⚠️ **Skip tests only if urgent:** | |
| ```bash | |
| ./deploy-huggingface.sh YOUR_USERNAME --skip-test | |
| ``` | |
| ## Success Checklist | |
| Before deploying to Hugging Face: | |
| - [ ] Local build succeeds: `./test-huggingface-build.sh` | |
| - [ ] All endpoints respond (/, /docs, /api/docs) | |
| - [ ] No errors in container logs | |
| - [ ] Image size < 50GB | |
| - [ ] All environment variables configured | |
| - [ ] HF Space hardware configured (CPU Basic minimum) | |
| - [ ] Git changes committed | |
| ## Resources | |
| - [Hugging Face Spaces Docker Guide](https://huggingface.co/docs/hub/spaces-sdks-docker) | |
| - [Docker Best Practices](https://docs.docker.com/develop/dev-best-practices/) | |
| - [Nginx Configuration](https://nginx.org/en/docs/) | |
| - [Supervisor Configuration](http://supervisord.org/configuration.html) | |
| --- | |
| **Last Updated:** 2026-04-26 | |