GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Guía para principiantes sobre la política de reinicio de Docker

Docker proporciona una opción de política de reinicio para permitir que sus contenedores se reinicien automáticamente en caso de ciertos eventos o fallas.

Esto es extremadamente útil en escenarios en los que debe reiniciar el host Docker (su servidor Linux) o si falla el servicio que se ejecuta en el contenedor.

Las políticas de reinicio de Docker se aplican por contenedor. Hay dos formas de asignar una política de reinicio a un contenedor. Puede configurarlo en el archivo YAML si va a utilizar Docker Compose o Swarm o Kubernetes.

También puede configurar la política de reinicio directamente en la línea de comando cuando ejecuta un contenedor:

docker container run --restart <policy>

Hablemos sobre qué tipo de política de reinicio puede usar.

Políticas de reinicio de Docker

Existen las siguientes políticas de reinicio para contenedores Docker:

  • no:el comportamiento predeterminado es no iniciar contenedores automáticamente
  • siempre:siempre reinicie un contenedor detenido a menos que el contenedor se haya detenido explícitamente
  • a menos que se detenga:reinicie el contenedor a menos que el contenedor estuviera detenido antes de que se detuviera el demonio Docker (se explica más adelante)
  • en caso de error:reinicie el contenedor si salió con un código de salida distinto de cero o si el demonio docker se reinicia

Como mencioné, si no agrega explícitamente una política de reinicio, dice "no", lo que significa que los contenedores no se reiniciarán automáticamente.

Explicación de las políticas de reinicio de Docker con ejemplos

Permítame mostrarle estas políticas en acción para que pueda visualizarlas. Esto es especialmente útil para entender la diferencia entre  always y unless-stopped políticas.

Política de reinicio siempre

Comencemos con el always política de reinicio. Con esta política establecida, el contenedor siempre se reiniciará a menos que se haya detenido explícitamente.

Voy a ejecutar un contenedor Alpine Linux con always política de reinicio. Lo estoy nombrando siempre-política.

El contenedor tiene una tarea. Ejecuta el comando bash sleep durante 10 segundos y luego sale.

docker container run --name always-policy --restart always alpine sleep 10

Sin el always reiniciar la política, el contenedor se habría detenido después de 10 segundos. Pero aquí, se reiniciará automáticamente y ejecutará el comando de suspensión durante otros 10 segundos y continuará así.

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   25 seconds ago   Up 4 seconds             always-policy

Puede ver en el comando anterior que, aunque el contenedor se creó hace 25 segundos, solo ha estado activo durante 4 segundos. Tenga en cuenta que se reinicia el mismo contenedor, no se crea uno nuevo.

Puede usar el comando docker inspect para ver cuántas veces se ha reiniciado el contenedor hasta el momento.

[email protected]:~$ docker inspect always-policy | grep -i restartcount
        "RestartCount": 4,

Si detiene el contenedor con el comando de parada, no se reiniciará automáticamente después. Puede ver en el siguiente ejemplo que el contenedor ahora tiene el estado 'Salido' en lugar de Activo.

[email protected]:~$ docker stop always-policy 
always-policy
[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                     PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   58 seconds ago   Exited (0) 6 seconds ago             always-policy

He usado el -it opción para ejecutar el contenedor con terminal interactivo en la captura de pantalla anterior. Eso fue por costumbre e innecesario aquí.

a menos que se detenga frente a la política de reinicio siempre

El unless-stopped es similar al always política de reinicio. Ambos reinician los contenedores automáticamente y si detiene los contenedores explícitamente, no se reinician.

Pero la principal diferencia entre los dos es que si detiene los contenedores con el comando docker stop y luego reinicia el demonio docker, el contenedor con always la política de reinicio iniciará el contenedor automáticamente, pero el contenedor con unless-stopped la política no se reiniciará.

Déjame mostrarlo con ejemplos. Ya tengo un contenedor detenido con política de reinicio siempre. Permítanme crear un nuevo contenedor llamado a menos que se detenga la política con unless-stopped política.

docker container run --name unless-stopped-policy --restart always alpine sleep 10

Detener el contenedor:

docker stop unless-stopped-policy

Ahora tengo dos contenedores que se han detenido explícitamente:

[email protected]:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS                          PORTS     NAMES
d244b6e08899   alpine    "sleep 10"   2 minutes ago    Exited (0) About a minute ago             unless-stopped-policy
1171dcfb7e06   alpine    "sleep 10"   22 minutes ago   Exited (0) 21 minutes ago                 always-policy

Reinicie el demonio de Docker:

sudo systemctl restart docker

Ahora, si revisa los contenedores en ejecución, puede ver que el contenedor llamado política siempre se está ejecutando porque se configuró con always política de reinicio.

[email protected]:~$ docker ps
CONTAINER ID   IMAGE     COMMAND      CREATED          STATUS         PORTS     NAMES
1171dcfb7e06   alpine    "sleep 10"   30 minutes ago   Up 8 seconds             always-policy

Los pasos completos se pueden ver en esta captura de pantalla:

política de reinicio en caso de error

El on-failure La política de reinicio reinicia un contenedor si se salió con un código de salida distinto de cero (que indica error/falla). También reinicia los contenedores si el demonio docker se reinicia, incluidos los que estaban detenidos antes.

Si detiene manualmente un contenedor con el comando docker stop, existe con el código cero que indica que todo era normal.

Configuración de la política de reinicio en el archivo Docker Compose

A estas alturas, ya tiene una buena idea sobre cómo ejecutar un contenedor con una política de reinicio.

Si está utilizando algo como Docker Compose para implementar contenedores, puede mencionar la política de reinicio para el objeto de servicio en el archivo YAML.

Aquí hay un ejemplo de muestra:

version: "3.3"      
services:
    NginxProxy:
        image: "jwilder/nginx-proxy:latest"
        restart: "on-failure"
        networks: ["net"]
        ports:
            - "80:80"
            - "443:443"

¿Qué política de reinicio de Docker usar?

Honestamente, no hay una respuesta directa a esta pregunta. Depende de su caso de uso y de lo que desee.

Espero que este artículo haya sido útil para comprender la política de reinicio de Docker. Si tiene alguna pregunta o sugerencia, hágamelo saber en la sección de comentarios.


Docker
  1. Qué es un contenedor Docker:una guía introductoria para principiantes

  2. Cómo ejecutar MySQL en Docker Container:una guía simple y fácil de seguir

  3. Algunos comandos DOCKER

  4. Una introducción a Docker

  5. Cómo usar SSH en un contenedor Docker

Aprendizaje de Docker:Cómo crear un contenedor Docker

Cómo usar las políticas de reinicio de Docker para mantener los contenedores en funcionamiento

Cómo ejecutar PHPMyAdmin en un contenedor Docker

Cómo ejecutar Grafana en un contenedor Docker

Cómo configurar un contenedor Apache Docker

Comandos de Docker para gestionar el ciclo de vida de los contenedores (guía definitiva)