Containers with a restart policy will follow that policy when the docker daemon is launched. As long as your system launches the docker daemon on boot, your containers will come up according to their restart policy. Docker: Starting Docker on System Boot on OSX via boot2docker or docker-osx. While it’s a relatively minor annoyance, i wanted to find away around the requirement of launching boot2docker, the LXC-emulating layer for OSX, every time I rebooted my machine.
Estimated reading time: 3 minutes Docker provides restart policiesto control whether your containers start automatically when they exit, or whenDocker restarts. Restart policies ensure that linked containers are started inthe correct order. Docker recommends that you use restart policies, and avoidusing 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 runningduring a Docker upgrade, though networking and user input are interrupted.Use a restart policy
To configure the restart policy for a container, use the
--restart
flagwhen using the docker run
command. The value of the --restart
flag can beany of the following:Flag | Description |
---|---|
no | Do not automatically restart the container. (the default) |
on-failure | Restart the container if it exits due to an error, which manifests as a non-zero exit code. |
always | Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted. (See the second bullet listed in restart policy details) |
unless-stopped | Similar to always , except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts. |
The following example starts a Redis container and configures it to alwaysrestart unless it is explicitly stopped or Docker is restarted.
Restart policy details
Keep the following in mind when using restart policies:
- A restart policy only takes effect after a container starts successfully. Inthis case, starting successfully means that the container is up for at least10 seconds and Docker has started monitoring it. This prevents a containerwhich does not start at all from going into a restart loop.
- If you manually stop a container, its restart policy is ignored until theDocker daemon restarts or the container is manually restarted. This is anotherattempt to prevent a restart loop.
- Restart policies only apply to containers. Restart policies for swarmservices are configured differently. See theflags related to service restart.
Use a process manager
If restart policies don’t suit your needs, such as when processes outsideDocker depend on Docker containers, you can use a process manager such asupstart,systemd, orsupervisor instead.
Warning: Do not try to combine Docker restart policies with host-levelprocess managers, because this creates conflicts.
To use a process manager, configure it to start your container or service usingthe same
docker start
or docker service
command you would normally use tostart the container manually. Consult the documentation for the specificprocess manager for more details.Using a process manager inside containers
Process managers can also run within the container to check whether a process isrunning and starts/restart it if not.
Warning: These are not Docker-aware and just monitor operating system processes within the container.
Docker does not recommend this approach, because it is platform-dependent and even differs within different versions of a given Linux distribution.
containers, restart, policies, automation, administration