Aunque parece que el indicador --restart es simple y directo, surgieron varias preguntas al experimentar con él:
ENTRYPOINT , ¿cuáles son las semánticas definidas reales durante el reinicio?exec en el contenedor (estoy en un DDC) y mato -9 el proceso, se reinicia, pero si docker kill , no lo hace. ¿Por qué?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 --alwaysSiempre 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
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 redisPara 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:
noNo reinicie automáticamente el contenedor. (el valor por defecto)
on-failureReinicie el contenedor si se cierra debido a un error, que se manifiesta como un código de salida distinto de cero.
alwaysSiempre 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-stoppedSimilar aalways, 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 redisEste comando cambia la política de reinicio de un contenedor que ya se está ejecutando llamado redis.
$ docker update --restart unless-stopped redisY 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:
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é:
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.docker kill detiene el reinicio, pero eso es lo que veo, al menos en Docker Data Center.ENTRYPOINT dado podría tomar en función de su condición en el momento del reinicio.