Skip to main content
Glama
APPLE-SILICON-DOCKER.md5.19 kB
# Apple Silicon Docker SQL Server Troubleshooting Guide This guide helps resolve common SQL Server Docker issues on Apple Silicon (M1/M2) Macs. ## Quick Fix Commands ```bash # 1. Run troubleshooting diagnostics npm run docker:troubleshoot # 2. Clean restart (recommended first step) npm run docker:clean && npm run test:integration # 3. Check platform optimization npm run docker:detect # 4. Monitor startup logs npm run docker:logs ``` ## Common Issues and Solutions ### 1. Container Exits Immediately **Error**: `"/opt/mssql/bin/permissions_check.sh: line 158: /var/opt/mssql/data/master.mdf: No such file or directory"` **Cause**: Rosetta 2 emulation issues or corrupted container state. **Solutions**: ```bash # A. Clean restart (removes all data) npm run docker:clean npm run docker:start:init # B. Check Rosetta 2 in Docker Desktop # Go to Docker Desktop → Settings → Features in development → Use Rosetta for x86/amd64 emulation # C. Regenerate platform config npm run docker:detect npm run docker:start:init ``` ### 2. Connection Refused (ECONNREFUSED) **Error**: `connect ECONNREFUSED 127.0.0.1:1433` **Cause**: Container startup takes longer on Apple Silicon due to emulation. **Solutions**: ```bash # A. Wait longer for startup npm run docker:wait # B. Check container status npm run docker:status # C. View startup logs npm run docker:logs # D. Use extended timeout test npm run docker:test:clean ``` ### 3. Binary Not Found **Error**: `"/opt/mssql/bin/sqlservr: No such file or directory"` **Cause**: Architecture mismatch or incomplete Rosetta 2 setup. **Solutions**: ```bash # A. Verify Rosetta 2 emulation docker run --rm --platform linux/amd64 hello-world # B. Clean Docker system npm run docker:clean docker system prune -f # C. Restart Docker Desktop completely # Quit Docker Desktop → Restart → Run commands again ``` ### 4. Memory/Performance Issues **Symptoms**: Slow startup, random crashes, timeout errors. **Solutions**: ```bash # A. Increase Docker memory allocation # Docker Desktop → Settings → Resources → Memory → Set to 6GB+ # B. The platform detection automatically configures: # - Memory limits (2.5GB container limit) # - Extended timeouts (45s start period) # - Proper security settings for emulation ``` ## Platform Detection Features Your test suite automatically: 1. **Detects Apple Silicon** and configures optimal settings 2. **Tests Rosetta 2 support** and chooses best image 3. **Sets extended timeouts** for emulation delays 4. **Configures memory limits** for stability 5. **Enables security options** needed for SQL Server emulation ## Architecture Selection Logic ```text Apple Silicon M1/M2 → Rosetta 2 Available? ├── Yes → SQL Server 2022 (emulated, full features) └── No → Azure SQL Edge (native ARM64, limited features) Intel/AMD64 → SQL Server 2022 (native, optimal performance) ``` ## Monitoring Commands ```bash # Container status npm run docker:status # Live logs npm run docker:logs # Connection test npm run docker:test-connection # Full diagnostics npm run docker:troubleshoot # Database shell access npm run docker:sql ``` ## Docker Desktop Settings for Apple Silicon 1. **Enable Rosetta 2**: Settings → Features in development → "Use Rosetta for x86/amd64 emulation" 2. **Increase Memory**: Settings → Resources → Memory → 6GB minimum 3. **Enable VirtioFS**: Settings → General → "Enable VirtioFS accelerated directory sharing" ## Performance Expectations | Configuration | Startup Time | Performance | Compatibility | | ------------------------- | ------------ | ----------- | ------------------ | | Apple Silicon + Rosetta 2 | 30-45s | Very Good | Full SQL Server | | Apple Silicon + SQL Edge | 15-25s | Excellent | Core features only | | Intel/AMD64 | 10-20s | Excellent | Full SQL Server | ## Advanced Troubleshooting ### Force Azure SQL Edge (if Rosetta 2 issues persist) Edit `test/docker/detect-platform.js` and modify the chooseBestConfiguration function to prefer Azure SQL Edge: ```javascript // Around line 110, change the condition to force SQL Edge if (hostInfo.arch === 'arm64') { // Force SQL Edge instead of Rosetta 2 return { config: CONFIG_TEMPLATES.azure_sql_edge_arm64, reason: 'Forced Azure SQL Edge for ARM64 compatibility', performance: 'Excellent (native ARM64)', compatibility: 'SQL Server core features (no SQL Agent)' }; } ``` ### Manual Docker Compose Override If you need to manually override the generated configuration: ```bash # Backup auto-generated config cp test/docker/docker-compose.yml test/docker/docker-compose.yml.backup # Make manual edits # The platform detection will regenerate on next docker:detect run ``` ## Getting Help 1. **Run diagnostics first**: `npm run docker:troubleshoot` 2. **Check recent logs**: `npm run docker:logs` 3. **Try clean restart**: `npm run docker:test:clean` 4. **Verify Docker settings**: Ensure Rosetta 2 is enabled This troubleshooting system is designed to automatically handle Apple Silicon complexities while providing fallback options and clear diagnostics.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/egarcia74/warp-sql-server-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server