Tuesday, July 26, 2022

Docker Restart policies

Hello DevOps/DevSecOps team, welcome back for another intresting post on Docker. In this post we will be discussing and experiment on "docker restart policies".
 

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:
docker run --restart [policy-type] IMAGE [COMMAND] [ARG...]
  
Below are the policy-type for the running a container with --restart option:

1.	no (Default): Will not start containers automatically when in exited state.
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
Ensure docker daemon restarts on system/VM reboot.
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 -a
After 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 ps
Ensure 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 nginx
unless-stopped
This policy work we will expect two use casees, Let's see first use case - This restart policy works same as always, when you are defined as follows the container nginxc1 after regular restart of docker engine it will be starting the container automatically.
   docker run --name nginxc1 \
 --restart unless-stopped -d nginx
 
  sudo systemctl restart docker

Use case 2 
The second use case - here the container will be stopped manually, but when the Docker engine restart completes there is no restarting container.

always
   docker run --name nginxc2 \
 --restart always -d nginx
 
  sudo systemctl restart docker

on_failure
   docker run --name nginxc3 \
 --restart on_failure -d nginx
 
  sudo systemctl restart docker

If 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.

No comments:

Categories

Kubernetes (24) Docker (20) git (13) Jenkins (12) AWS (7) Jenkins CI (5) Vagrant (5) K8s (4) VirtualBox (4) CentOS7 (3) docker registry (3) docker-ee (3) ucp (3) Jenkins Automation (2) Jenkins Master Slave (2) Jenkins Project (2) containers (2) docker EE (2) docker private registry (2) dockers (2) dtr (2) kubeadm (2) kubectl (2) kubelet (2) openssl (2) Alert Manager CLI (1) AlertManager (1) Apache Maven (1) Best DevOps interview questions (1) CentOS (1) Container as a Service (1) DevOps Interview Questions (1) Docker 19 CE on Ubuntu 19.04 (1) Docker Tutorial (1) Docker UCP (1) Docker installation on Ubunutu (1) Docker interview questions (1) Docker on PowerShell (1) Docker on Windows (1) Docker version (1) Docker-ee installation on CentOS (1) DockerHub (1) Features of DTR (1) Fedora (1) Freestyle Project (1) Git Install on CentOS (1) Git Install on Oracle Linux (1) Git Install on RHEL (1) Git Source based installation (1) Git line ending setup (1) Git migration (1) Grafana on Windows (1) Install DTR (1) Install Docker on Windows Server (1) Install Maven on CentOS (1) Issues (1) Jenkins CI server on AWS instance (1) Jenkins First Job (1) Jenkins Installation on CentOS7 (1) Jenkins Master (1) Jenkins automatic build (1) Jenkins installation on Ubuntu 18.04 (1) Jenkins integration with GitHub server (1) Jenkins on AWS Ubuntu (1) Kubernetes Cluster provisioning (1) Kubernetes interview questions (1) Kuberntes Installation (1) Maven (1) Maven installation on Unix (1) Operations interview Questions (1) Oracle Linux (1) Personal access tokens on GitHub (1) Problem in Docker (1) Prometheus (1) Prometheus CLI (1) RHEL (1) SCM (1) SCM Poll (1) SRE interview questions (1) Troubleshooting (1) Uninstall Git (1) Uninstall Git on CentOS7 (1) Universal Control Plane (1) Vagrantfile (1) amtool (1) aws IAM Role (1) aws policy (1) caas (1) chef installation (1) create deployment (1) create organization on UCP (1) create team on UCP (1) docker CE (1) docker UCP console (1) docker command line (1) docker commands (1) docker community edition (1) docker container (1) docker editions (1) docker enterprise edition (1) docker enterprise edition deep dive (1) docker for windows (1) docker hub (1) docker installation (1) docker node (1) docker releases (1) docker secure registry (1) docker service (1) docker swarm init (1) docker swarm join (1) docker trusted registry (1) elasticBeanStalk (1) global configurations (1) helm installation issue (1) mvn (1) namespaces (1) promtool (1) service creation (1) slack (1)