Skip to content
Community

EXPLORE TOPICS

Editorial approach

New to CoreTrailKit?

Observe your services. Keep the evidence close.

CoreTrailKit
Back to articles
GUIDE/ Kubernetes

CrashLoopBackOff: inspect the previous container

The Pod alternates between a brief start and CrashLoopBackOff. Every manual restart repeats the same failure. Before changing a probe or adding more retries, inspect what the application did during its last attempt.

By CoreTrailKit3 min read

01

Treat the status as a clue, not the cause

CrashLoopBackOff can follow many different failures. Check the affected container’s current state, last termination, and restart count. An exit code, termination reason, and application message together are more useful than the short status column alone.

Our process required APP_MODE=ready. Without that setting it printed a specific configuration error and exited 42. Kubernetes restarted it, then exposed backoff while further attempts continued to fail. The delay was a consequence of the repeated application exit.

sh · EXAMPLE
kubectl -n your-namespace describe pod your-pod
kubectl -n your-namespace get pod your-pod -o yaml

02

Read the logs from the attempt that failed

A currently starting container may have little output. Request the previous instance’s logs for the correct container name. Capture them promptly because only a limited local history is available; a deleted Pod or additional restarts can remove the exact instance you wanted.

In the lab, --previous returned APP_MODE must be ready, and lastState recorded exit 42. That paired evidence gave us a concrete repair target without changing the image, restarting the node, or weakening health checks.

sh · EXAMPLE
kubectl -n your-namespace logs your-pod -c app --previous
kubectl -n your-namespace logs your-pod -c app

03

Check the effective configuration and owner

Inspect whether the value is set directly, supplied through a ConfigMap, or expected from another source. Confirm the namespace and referenced key. Do not dump a full environment if it contains credentials; inspect only the non-sensitive setting involved.

Determine which controller owns the Pod and follow the configuration back to the Deployment, StatefulSet, or other source of truth. A one-off change to a disposable child Pod can disappear during the next reconciliation.

sh · EXAMPLE
kubectl -n your-namespace get pod your-pod \
  -o jsonpath='{.metadata.ownerReferences}'
kubectl -n your-namespace get deployment your-deployment -o yaml

04

Repair the cause, then verify the new attempt

For a Deployment that intentionally uses this example setting, the following command updates its Pod template. In a GitOps or managed delivery environment, make the equivalent change through that workflow instead of leaving a manual drift.

Our corrected test process printed mode-ok and remained Ready after APP_MODE was supplied. The application’s failure condition changed; we did not merely wait longer for the same invalid configuration.

sh · EXAMPLE
# Example only: use the setting your application actually requires.
kubectl -n your-namespace set env deployment/your-deployment APP_MODE=ready
kubectl -n your-namespace rollout status deployment/your-deployment

05

Verify useful behavior beyond an early Ready state

Review the new logs and repeat the operation the application exists to perform. Watch for continuing restarts over a suitable observation window. A successful start alone does not prove downstream connectivity or correct results.

If the next attempt fails with a different message, preserve that evidence as a new stage. Memory kills, bad executable paths, and probe-triggered restarts need different repairs. Use the last failure to choose the next check rather than applying a generic restart recipe.

Know the limits

Tested in Kubernetes v1.32.2 with a Python process that exits 42 when APP_MODE is missing or invalid. No startup, readiness, or liveness probes were configured. The example concerns an application exit, distinct from the existing startup-probe guide.

Sources & further reading

A technical publication by CoreTrailKit.

Browse all articles

CONTINUE EXPLORING