Skip to main content
A deploy that starts a container is not a deploy that works. In this tutorial you will add a readiness check, ship a release that fails it on purpose, read exactly why it failed, and recover. The point is that a broken release never replaces a working one.

Before you start

  • A running Levelrail instance and the CLI logged in to it (installing).
  • An app that is already running. This tutorial reuses hello from Deploy a Docker app, which serves the stock nginx page.
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

Last modified on October 12, 2026