Before you start
- A running Levelrail instance and the CLI logged in to it (installing).
- An app that is already running. This tutorial reuses
hellofrom Deploy a Docker app, which serves the stocknginxpage.
1
Add a readiness check
A readiness probe gates a deploy: the new release only takes over once the probe passes. A liveness probe restarts a container that hangs later. Start with readiness, pointing at a path that does not exist yet:The probe is an HTTP request that must return a status from 200 to 299. You can also run a command inside the container with
--exec instead of --path.2
Ship a release that fails it
The stock nginx page has no
/healthz, so the probe will get a 404. Deploy a new version:apps wait exits non-zero here, so a script or a CI job fails instead of carrying on. The deploy history shows it:3
Read the failure
Every failed or blocked deploy carries a structured reason. Open it:You get the failure code, the plain-language cause, a suggested fix, and the last lines the container logged. Read this before changing anything, and change one thing per attempt. The app’s own status agrees:
4
Fix it, or roll back
Here the probe path was wrong, not the release. Point it at a path that exists and deploy again:
--pull re-resolves the tag so the deploy runs even when the image is unchanged. If the release itself were broken, you would go back instead:What the platform guarantees
Levelrail keeps the previous release serving while a new one fails its readiness check, and holds the last good release for a short window after a successful cutover so rollback is instant. The full list, including digest-truthful deploys and the stale-deploy guard, is in Deploy safety. Failure codes are in Deploy failures.Clean up
Where to go next
- Deploy from GitHub Actions: fail the pipeline when a rollout fails.
- Deploy safety: freeze windows and the post-cutover hold.
- Load balancing: health checks across replicas.