Common problems
Always start with the same question: which step did it stop at? The deployment state already rules out half the possible causes.
The deployment fails at Building
The problem is in the image build. Open Logs → Build and choose the deployment.
| In the log | Cause | What to do |
|---|---|---|
Dockerfile: no such file or directory | The deployed folder has no Dockerfile | Fix the folder in the project's source |
| Authentication failure fetching the code | Private repository with no access token | Enter a token under Source, in the project |
| Dependency error | A difference between your machine and a clean build | Pin versions; the build does not reuse what exists locally |
| Out of memory during the build | The build is too heavy | Reduce steps, use a smaller base image, or use a multi-stage build |
The application does not become ready
The build passed, but the application did not become ready — it did not accept connections on the service's port. The deployment fails with the reason, and on the deployment screen the Answering step shows as failed, with the problem and the action. The same code appears in the API and in the CLI:
| Code | What the screen says | What to do |
|---|---|---|
APPLICATION_NOT_STARTED | The application never started | Deploy again. If the reason comes back, talk to whoever administers the platform: the image could not be pulled, the environment refused to create the process, or capacity ran out — none of that is fixed in the application |
APPLICATION_CRASHED_ON_START | The application stopped right after starting | Look at the last lines under Logs → Runtime |
HEALTH_CHECK_FAILED | The application started but did not answer | Make the application listen on 0.0.0.0, on the port from the PORT variable |
Before failing, the timeline narrates the wait — "The application started, but is not accepting connections on port 8080 yet.", for example. Definitive reasons end in about 30 seconds; the others, within the 5-minute deadline.
What to look at, in order:
- The port. The application must listen on
0.0.0.0, on the port given by thePORTvariable — not onlocalhost, nor on a fixed port.EXPOSEin theDockerfiledoes not change the port. This is the most common cause. - Startup. Open Logs → Runtime: an exception at startup shows up there.
- Missing configuration. A missing variable or secret usually takes the application down at startup. See Configuration.
- Writing to disk. The file system is read-only, except
/tmp. Writing anywhere else fails — and, if it happens at startup, it usually takes the application down. See How the application runs. - Resources. Maximum memory set too low takes the application down while it starts. See Resources and limits.
Nothing was switched: the previous version keeps serving. If you need time to investigate, there is no rush to restore anything.
I clicked Deploy and nothing appears in the list
The failure happened before there was a committed version — an unreachable repository or a branch that does not exist, for example.
Open Deployment attempts in the project: that is where those are recorded, with the reason.
The address does not answer
| Check | Where |
|---|---|
| Did the deployment reach Online? | Deployments |
| Was there an address change? The previous address stops answering once the new one is live | Domains, in the project |
| Are HTTPS and routing confirmed? | Domains, in the project |
| Is the application up? | Services — ready replicas |
| Is the application answering? | Logs → Runtime |
If you use a custom domain, check the zone's state too: a zone that is not Ready does not serve addresses.
The deployment stayed at 3 of 4 steps
That is normal right after deploying. The last step, Address confirmed, is only marked when a real request comes in from the internet and the application answers it. Open the address in a browser: from the first response on, the ladder goes to 4 of 4 and shows Receiving traffic.
If you opened the address and the ladder did not move, see The address does not answer: a response generated by the platform when it cannot reach the application, such as a 503, does not count as proof.
The application is live, but with errors
- Observability → Routes shows which route concentrates the errors. A 2% rate overall can be 100% on one specific route.
- Logs → Runtime shows what the application wrote at the time.
- If the errors started after a deployment, restore the previous version and investigate calmly.