Troubleshooting
Solutions for common issues you may encounter when using Doku.
"Permission denied" on deploy
Cause: Your cloud provider credentials are missing, expired, or lack the required IAM permissions.
Fix:
- Verify your credentials are set:
echo $AWS_ACCESS_KEY_ID(or equivalent for GCP/Azure) - Check that the IAM user/role has the required permissions — see Cloud Providers
- If using temporary credentials (STS), make sure they haven't expired
- Run
doku auth whoamito verify your Doku authentication is valid
Deploy stuck in "provisioning"
Cause: Infrastructure creation is taking longer than expected, often due to cloud provider rate limits or resource quotas.
Fix:
- Run
doku deploy --verboseto see detailed provisioning logs - Check your cloud provider's console for resource limits (ECS task limits, VPC quotas, etc.)
- If the deployment is truly stuck, cancel it with
Ctrl+Cand retry
Canary failed, deployment rolled back
Cause: The new version exceeded error rate or latency thresholds during canary rollout.
Fix:
- Check the deployment logs:
doku logs --env staging --since 30m --level error - Review the deployment output for the specific metric that triggered rollback
- Fix the issue in your application code
- Re-deploy with
doku deploy
doku.yaml under the canary section.Cloud credentials not found
Doku looks for cloud credentials in this order:
- Environment variables (
AWS_ACCESS_KEY_ID,GOOGLE_APPLICATION_CREDENTIALS, etc.) - Cloud CLI configuration (~/.aws/credentials, gcloud auth, az login)
- Instance metadata (when running on a cloud VM with an attached role)
Make sure at least one of these is configured. See provider-specific setup in Cloud Providers.
Health check failing
Cause: The health check endpoint in your doku.yaml is not responding with a 200 status.
Fix:
- Verify your application has a health check endpoint (e.g.,
/healthor/api/health) - Make sure it returns HTTP 200 when the application is ready to serve traffic
- Check that the port in
doku.yamlmatches the port your app listens on
// Example health check endpoint (Express)
app.get('/health', (req, res) => {
res.status(200).json({ status: 'ok' });
});Debug Mode
For detailed debugging output, use the --verbose flag:
doku deploy --verboseThis prints infrastructure plan details, container build logs, health check results, and canary metrics at each rollout step.
Getting Help
- GitHub Issues — Report bugs and request features on the Doku GitHub repository
- Discord — Join the Doku community for real-time help
- Email — Reach the team at support@doku.io