Start containers automatically

Estimated reading time: 2 minutes

Docker provides restart policies to control whether your containers start automatically when they exit, or when Docker restarts. Restart policies ensure that linked containers are started in the correct order. Docker recommends that you use restart policies, and avoid using process managers to start containers.

Restart policies are different from the --live-restore flag of the dockerd command. Using --live-restore allows you to keep your containers running during a Docker upgrade, though networking and user input will be interrupted.

Use a restart policy

To configure the restart policy for a container, use the --restart flag when using the docker run command. The value of the --restart flag can be any of the following:

FlagDescription
noDo not automatically restart the container. (the default)
on-failureRestart the container if it exits due to an error, which manifests as a non-zero exit code.
unless-stoppedRestart the container unless it is explicitly stopped or Docker itself is stopped or restarted.
alwaysAlways restart the container if it stops.

The following example starts a Redis container and configures it to always restart unless it is explicitly stopped or Docker is restarted.

$ docker run -dit --restart unless-stopped redis

Restart policy details

Keep the following in mind when using restart policies:

  • A restart policy only takes effect after a container starts successfully. In this case, starting successfully means that the container is up for at least 10 seconds and Docker has started monitoring it. This prevents a container which does not start at all from going into a restart loop.

  • If you manually stop a container, its restart policy is ignored until the Docker daemon restarts or the container is manually restarted. This is another attempt to prevent a restart loop.

  • Restart policies only apply to containers. Restart policies for swarm services are configured differently. See the flags related to service restart.

Use a process manager

If restart policies don’t suit your needs, such as when processes outside Docker depend on Docker containers, you can use a process manager such as upstart, systemd, or supervisor instead.

A process manager runs within the container and checks whether a process is running and starts it if not. It is not Docker-aware, but just monitors operating system processes within the container.

Docker does not recommend this approach, because it is not platform-dependent and even differs within different versions of a given Linux distribution.

Warning: Do not try to combine Docker restart policies with host-level process managers, because the two will conflict.

To use a process manager, configure it to start your container or service using the same docker start or docker service command you would normally use to start the container manually. Consult the documentation for the specific process manager for more details.

containers, restart, policies, automation, administration