Connection Refused
Your service isn’t responding on the expected port.Quick Checks
Common Causes
Port not exposed in docker-compose.yml:Connection Timeout
The connection hangs without immediate response.Diagnosis Steps
Common Causes
Service still starting: Some applications take time to initialize. Check logs for startup progress. Wrong URL format:TLS/Certificate Errors
TLS Handshake Failed
For default mode (TLS termination):s
suffix):
Certificate Hostname Mismatch
In passthrough mode, you have two options: Option 1: Use a custom domain with dstack-ingress*.phala.network
domains. Use passthrough mode primarily with custom domains or for protocols that handle certificates differently (like some databases).
Custom Domain Issues
DNS Not Resolving
Certificate Not Issued
For custom domains using dstack-ingress:- Cloudflare: ~2 minutes
- Linode: ~5 minutes
- Namecheap: ~2 minutes
CAA Record Blocking Certificate
If you previously usedSET_CAA=true
and then wiped certificates/account, old CAA records may block new certificate issuance:
-
Wait for dstack-ingress to update CAA: If
SET_CAA=true
, it will attempt to replace old CAA records, but DNS propagation may cause initial failures. - Manually remove old CAA records: Use your DNS provider’s control panel to delete CAA records before redeploying.
-
Disable CAA temporarily: Set
SET_CAA=false
to avoid CAA checks during certificate issuance.
gRPC Connection Failed
HTTP/2 Not Available
Testing gRPC Service
SSH Access Denied
Development OS Required
SSH only works with development OS images. Production images have SSH disabled.Check Configuration
macOS OpenSSL Issue
macOS uses LibreSSL which may cause issues:Debugging Commands
From Outside CVM
Inside CVM (SSH Required)
Common Patterns
Service Works Locally but Not Externally
- Check port is exposed in docker-compose.yml
- Verify service binds to 0.0.0.0, not 127.0.0.1
- Confirm URL format is correct (no port number in URL)
Intermittent Connection Failures
Could indicate unhealthy instances if you have multiple replicas. The gateway removes unhealthy instances from rotation after 5 minutes without WireGuard handshake.Works with curl but Not Application
Check if your application:- Supports SNI (Server Name Indication)
- Uses correct TLS version (1.2 or 1.3)
- Handles redirects properly
Getting Support
When reporting issues, provide:- Application ID from your deployment
- Exact URL you’re trying to access
- Error message (complete output)
- Container logs:
docker logs <container> --tail 100
- Test results from debugging commands above