Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

638
Views
Docker: ¿qué hace realmente `docker run --restart always`?

Aunque parece que el indicador --restart es simple y directo, surgieron varias preguntas al experimentar con él:

  1. Con respecto a las definiciones de ENTRYPOINT , ¿cuáles son las semánticas definidas reales durante el reinicio?
  2. Si exec en el contenedor (estoy en un DDC) y mato -9 el proceso, se reinicia, pero si docker kill , no lo hace. ¿Por qué?
  3. ¿Cómo interactúa el reinicio con los contenedores de datos compartidos/volúmenes con nombre?
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Políticas de reinicio

Con el indicador --restart en la ejecución de Docker, puede especificar una política de reinicio sobre cómo se debe o no reiniciar un contenedor al salir.

Cuando una política de reinicio está activa en un contenedor, se mostrará como Activo o Reiniciando en docker ps. También puede ser útil usar eventos de la ventana acoplable para ver la política de reinicio en vigor.

 docker run --always

Siempre reinicie el contenedor independientemente del estado de salida. Cuando especifica siempre, el demonio de Docker intentará reiniciar el contenedor indefinidamente. El contenedor siempre se iniciará en el inicio del daemon, independientemente del estado actual del contenedor.

Te recomiendo esta documentación sobre políticas de reinicio.

Documentación - Políticas de reinicio

Actualizar Docker v19.03

Reiniciar políticas (--restart)

Use --restart de Docker para especificar la política de reinicio de un contenedor. Una política de reinicio > controla si el demonio Docker reinicia un contenedor después de salir. Docker admite las siguientes políticas de reinicio:

siempre Siempre reinicie el contenedor independientemente del estado de salida. Cuando especifica siempre, el demonio de Docker intentará reiniciar el contenedor indefinidamente. El contenedor siempre se iniciará en el inicio del daemon, independientemente del estado actual del contenedor.

 $ docker run --restart=always redis

Documentación - Políticas de reinicio

over 4 years ago · Santiago Trujillo Report

0

Para configurar la política de reinicio para un contenedor, use el indicador --restart cuando use el comando docker run. El valor del indicador --restart puede ser cualquiera de los siguientes:

no No reinicie automáticamente el contenedor. (el valor por defecto)

on-failure Reinicie el contenedor si se cierra debido a un error, que se manifiesta como un código de salida distinto de cero.

always Siempre reinicie el contenedor si se detiene. Si se detiene manualmente, se reinicia solo cuando se reinicia el demonio Docker o el propio contenedor se reinicia manualmente.

unless-stopped Similar a always , excepto que cuando el contenedor se detiene (manualmente o de otra manera), no se reinicia incluso después de que se reinicia el demonio Docker.

El siguiente ejemplo inicia un contenedor de Redis y lo configura para que siempre se reinicie a menos que se detenga explícitamente o se reinicie Docker.

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

Este comando cambia la política de reinicio de un contenedor que ya se está ejecutando llamado redis.

 $ docker update --restart unless-stopped redis

Y este comando garantizará que todos los contenedores que se están ejecutando actualmente se reiniciarán a menos que se detengan.

 $ docker update --restart unless-stopped $(docker ps -q)

Detalles de la política de reinicio

Tenga en cuenta lo siguiente cuando utilice políticas de reinicio:

  • Una política de reinicio solo surte efecto después de que un contenedor se inicia correctamente. En este caso, iniciar correctamente significa que el contenedor está activo durante al menos 10 segundos y Docker ha comenzado a monitorearlo. Esto evita que un contenedor que no arranca entre en un bucle de reinicio.
  • Si detiene manualmente un contenedor, su política de reinicio se ignora hasta que el demonio Docker se reinicia o el contenedor se reinicia manualmente. Este es otro intento de evitar un bucle de reinicio.
  • Las políticas de reinicio solo se aplican a los contenedores. Las políticas de reinicio para los servicios de enjambre se configuran de manera diferente.

Documentación

over 4 years ago · Santiago Trujillo Report

0

Tuve algo de tiempo para depurar esto más hoy -> debido a que estaba usando una imagen acoplable 'oficial', tenía poca o ninguna visibilidad de lo que estaba ocurriendo. Para resolver esto, amplié la imagen oficial e invoqué mi propio punto de entrada. El Dockerfile:

 FROM officialImage:version ENV envOne=value1 \ envTwo=value2 COPY wrapper-entrypoint.sh / ENTRYPOINT ["/wrapper-entrypoint.sh"]

Luego hice un 'set -x' en el script wrapper-entrypoint.sh e invoqué el original:

 #!/bin/bash set -x echo "Be pedantic: all args passed: $@" bash -x ./original-entrypoint.sh "$@"

De esto encontré:

  • Restart llama al ENTRYPOINT original con los argumentos originales. La imagen oficial que utilicé detectó que ya se había inicializado y, por lo tanto, actuó de manera diferente. Es por eso que estaba confundido sobre la semántica. Usar -x me permitió ver lo que realmente estaba sucediendo.
  • Todavía no sé por qué docker kill detiene el reinicio, pero eso es lo que veo, al menos en Docker Data Center.
  • No creo que los volúmenes de datos compartidos afecten esto de ninguna manera, GUARDE para las acciones que un script de ENTRYPOINT dado podría tomar en función de su condición en el momento del reinicio.
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!