What is Docker restart policies?
Docker provides restart policies to control whether your containers start automatically when they exit, or when Docker daemon restarts.A Docker container’s status can be controlled by providing the restart policy while the container is instantiated with docker run sub command.
Docker container restart policies |
Docker restart policies are there to keep containers active(Up status) in all possible downfalls, we can leverage it in multiple ways as an example if we have a Tomcat/Nginx web server running on a container and have to keep it Up and running even on bad request we can use restart policy with a flag, it will keep the server "Up" and running till we stopped it manually.
Syntax:
Below are the policy-type for the running a container with --restart option:
2. on-failure [:max-retries] : Restart the container if it exits due to an error ( could be because of a crash ), which manifests as a non-zero exit code. (usually it’ll be in 100+ number 127 or 137, 143 exit codes).
3. unless-stopped: Restarts the container unless it is stopped manually. If done manually then container will not restart even after restarting Docker daemon.
4. always: It restarts always in any given situation, however If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted.
.
How to enable restart of container which is already running?
If I do restart the docker service restart with the following command on RHEL or Ubuntu Linux:
sudo systemctl enable docker.service[optional] On the Play With Docker you can run the following command to restart the docker daemon.
kill -9 `pgrep dockerd`; dockerd > /docker.log 2>&1 &
1. Default policy no
What will happen to that running container? Does it start by itself? No because it's restart policy by default 'no' so it won't start.docker container run --name no-c1 --restart no -d nginx docker ps kill -9 `pgrep dockerd`; dockerd > /docker.log 2 > &1 & docker ps docker ps -aAfter restart of docker daemon also "no" effect to the container. That is the default behaviour of containers. always The name itself telling us it always try to restart the container when a docker daemon restarts.
# Usecase 1: a container with restart policy using always after the docker daemon restart will restart container docker container run --name always-c1 --restart always -d nginx docker ps kill -9 `pgrep dockerd`; dockerd > /docker.log 2>&1 & docker ps # Usecase 2: When you stop the container and restart the docker daemon $ docker stop always-c1 kill -9 `pgrep dockerd`; dockerd > /docker.log 2>&1 & docker psEnsure the docker container has restart policy with update command
docker update --restart=always [container id or container name]Regular restart policy is no. That means default container if it dies due to some reason, it will not start by itself.
docker run --name nginxc0 \ -d nginxunless-stopped
docker run --name nginxc1 \ --restart unless-stopped -d nginx sudo systemctl restart docker
Use case 2
docker run --name nginxc2 \ --restart always -d nginx sudo systemctl restart dockeron_failure
docker run --name nginxc3 \ --restart on_failure -d nginx sudo systemctl restart dockerIf we undderstand this setup how it works and saves in production, same policies will be used in the docker compose and docker stack yaml files as well.