Skip to main content

Restart policies

This article refers to Platform v3.1.0. The current Platform version is v3.2.0.

Overview

A Docker restart policy tells the runtime what to do when a container stops. Picking the right policy is the difference between an app that self-heals from a transient crash and one that needs manual intervention every time. This article covers the four policies, the one that Barbara does not allow, and the right defaults.

Available restart policies

Docker Compose supports four values for the restart: directive:

PolicyBehaviour
no (default)The container is not restarted automatically when it stops.
unless-stoppedThe container is restarted unless an operator manually stopped it.
on-failureThe container is restarted only when it exits with a non-zero exit code. Accepts an optional max-retries count.
alwaysThe container is restarted no matter what — including after a clean shutdown.
danger

The always policy is forbidden on Barbara edge nodes. Use unless-stopped instead — it survives crashes and reboots while still letting an operator stop the workload from Panel.

Compose syntax

version: '3.8'

services:
filebrowser:
image: filebrowser/filebrowser:latest
ports:
- "8080:80"
restart: unless-stopped

With restart: unless-stopped:

  • The container restarts after a crash.
  • The container restarts after the node reboots.
  • The container does not restart after an operator stops it from Panel — that intent is preserved.
  • Long-running services (brokers, databases, web UIs) — restart: unless-stopped.
  • One-shot jobs (migrations, batch processors that exit on completion) — restart: no or restart: on-failure.
  • Anything else — pick unless-stopped unless you have a specific reason otherwise.

Summary

unless-stopped is the right default for almost every long-running workload on a Barbara edge node. Use on-failure for jobs that have a defined end. Never use always — it is rejected by the Barbara agent.