Full error: "Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable."
Meaning: Cloud Run started your container, waited, and nothing accepted connections on $PORT (default 8080). The container may have crashed instantly or bound the wrong port.
Fix checklist, in order:
1. Read PORT from the environment in your code. Never hardcode 3000/5000/8000. In Node: `process.env.PORT || 8080`. In Python: `os.environ.get("PORT", 8080)`. In Go: `os.Getenv("PORT")`.
2. Bind the all-interfaces address, not YOUR_HOST. Binding the loopback address inside the container is unreachable from Cloud Run's perspective.
3. Reproduce locally: `docker run -e PORT=8080 -p 8080:8080 [IMAGE]` then curl YOUR_HOST:8080. If it fails locally, it is your image, not Cloud Run.
4. Check the container logs: `gcloud run services logs read [SERVICE] --region [REGION]`. A crash traceback here means fix the crash first.
5. Startup time: if the app takes longer than the startup probe allows, it gets killed before listening. Optimize startup or raise CPU.
Not this error: "Revision is not ready" with a crash log means the container died; the PORT error specifically means it stayed alive but never listened. Different fix.
Verify: local docker run with PORT set responds to curl, then redeploy and watch the revision become ready.