Introduction When a Cloud Run revision fails to start, the previous revision continues serving traffic. The new revision shows "Failed" status with an error reason.

Symptoms - Cloud Console shows revision status: "Failed" - Container logs show startup errors - Error: "The user-provided container failed to start" - Revision has 0 instances and no traffic

Common Causes - Container does not listen on the PORT environment variable - Container startup takes longer than the default timeout - Memory limit too low causing OOM during startup - Container image from private registry without proper permissions - Entrypoint or CMD misconfiguration in Dockerfile

Step-by-Step Fix 1. **Check revision error details**: ```bash gcloud run revisions describe <revision-name> --region <region> --format="value(status.conditions)" ```

  1. 1.Check container logs:
  2. 2.```bash
  3. 3.gcloud logging read "resource.type=cloud_run_revision AND resource.labels.revision_name=<revision>" --limit=20
  4. 4.`
  5. 5.Verify container listens on PORT:
  6. 6.```javascript
  7. 7.const port = process.env.PORT || 8080;
  8. 8.app.listen(port, () => console.log(Listening on port ${port}));
  9. 9.`
  10. 10.Increase memory and timeout:
  11. 11.```bash
  12. 12.gcloud run services update <service-name> --region <region> --memory 2Gi --timeout 300 --cpu 2
  13. 13.`
  14. 14.Check image permissions:
  15. 15.```bash
  16. 16.gcloud artifacts repositories add-iam-policy-binding <repo> --location <region> \
  17. 17.--member="serviceAccount:<project-number>-compute@developer.gserviceaccount.com" \
  18. 18.--role="roles/artifactregistry.reader"
  19. 19.`

Prevention - Set explicit PORT handling in application code - Configure startup timeout for slow-starting applications - Test container locally: `docker run -p 8080:8080 -e PORT=8080 <image>` - Use deployment rollouts for gradual traffic shifting