3.8 KiB
3.8 KiB
Docker Testing Results
Testing Date: June 13, 2025
Test Environment
- Docker version: Docker Desktop on macOS
- Platform: arm64 (Apple Silicon)
- Node.js in container: v20.19.2
Test Results Summary
✅ Successful Tests
-
Docker Build Process
- Multi-stage build completes successfully
- Build context optimized from 1.75GB to 6.87KB with proper .dockerignore
- All layers cache properly for faster rebuilds
-
Health Endpoint
- Returns proper JSON response
- Shows correct uptime, memory usage, and version
- Accessible at http://localhost:3000/health
-
Authentication (HTTP Mode)
- Correctly rejects requests with wrong token (401 Unauthorized)
- Accepts requests with correct AUTH_TOKEN
- Warns when AUTH_TOKEN is less than 32 characters
-
Docker Compose Deployment
- Creates named volumes for persistence
- Respects resource limits (512MB max, 256MB reserved)
- Health checks run every 30 seconds
- Graceful shutdown on SIGTERM
-
Stdio Mode
- Container starts in stdio mode with MCP_MODE=stdio
- Accepts JSON-RPC input via stdin
- Returns responses via stdout
⚠️ Issues Discovered
-
Database Initialization Failure
Error: ENOENT: no such file or directory, open '/app/src/database/schema.sql'- Cause: schema.sql not included in Docker image
- Impact: Database cannot be initialized on first run
- Fix: Include src/database/schema.sql in Dockerfile
-
MCP Endpoint Error
{ "error": { "code": -32700, "message": "Parse error", "data": "InternalServerError: stream is not readable" } }- Likely related to missing database
- Needs investigation after fixing database initialization
-
Large Image Size
- Current size: 2.61GB
- Cause: All node_modules included in production
- Potential optimization: Use Alpine packages where possible
📊 Performance Metrics
- Build time: ~5 minutes (with cache)
- Startup time: <2 seconds
- Memory usage: ~8-9MB (idle)
- Health check response time: <50ms
🔧 Recommended Fixes
-
Immediate (Phase 1)
- Include schema.sql in Docker image
- Add scripts directory for rebuild functionality
- Test database initialization in clean environment
-
Future Improvements (Phase 2)
- Optimize image size with multi-stage pruning
- Add database migration support
- Implement proper logging rotation
- Add Prometheus metrics endpoint
📋 Testing Checklist
- Docker build completes
- Image runs without crashes
- Health endpoint responds
- Authentication works
- Docker Compose deploys
- Volumes persist data
- Resource limits enforced
- Graceful shutdown works
- Database initializes properly
- MCP tools function correctly
- Cross-platform compatibility (arm64/amd64)
Next Steps
- Apply fixes from Dockerfile.fixed
- Test database initialization thoroughly
- Verify MCP functionality with initialized database
- Test multi-architecture builds in CI
- Document troubleshooting steps
Test Commands Used
# Build image
docker build -t n8n-mcp:test .
# Test stdio mode
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | \
docker run --rm -i -e MCP_MODE=stdio n8n-mcp:test
# Test HTTP mode
docker run -d --name test-http \
-e MCP_MODE=http \
-e AUTH_TOKEN=test-token \
-p 3001:3000 \
n8n-mcp:test
# Test with docker-compose
docker compose up -d
docker compose logs -f
# Health check
curl http://localhost:3000/health
# Test authentication
curl -H "Authorization: Bearer test-token" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}' \
http://localhost:3000/mcp