Veo que Docker ha agregado algo llamado políticas de reinicio para manejar el reinicio de los contenedores en caso de, por ejemplo, reiniciar.
Si bien esto es muy útil, veo que el comando de política de reinicio solo funciona docker run
y no docker start
. Entonces mi pregunta es:
¿Hay alguna forma de agregar políticas de reinicio a un contenedor que ya se creó en el pasado?
Respuestas:
En versiones recientes de docker (a partir de 1.11) tiene un
update
comando:fuente
docker update --restart always <container>
docs.docker.com/engine/admin/start-containers-automaticallydocker update
acepta múltiples ID de contenedores, por lo que no es necesarioxargs
, simplemente hazlodocker update --restart=always $(docker ps -q)
.Hay dos enfoques para modificar RestartPolicy:
docker commit
su contenedor como una nueva imagen, detenga y rm el contenedor actual e inicie un nuevo contenedor con la imagen.fuente
docker update
permite modificar la política de reinicio solo en 1.11+El uso de la
--restart=always
política manejará el reinicio de los contenedores existentes en caso de reinicio.El problema es que si hay varios contenedores con
--restart=always
al ejecutar la imagen de una versión más reciente como se discutió en ventana acoplable - ¿Cómo desactivar el rearranque automático en un contenedor? .Entonces, en este caso, es mejor elegir otra opción: - reiniciar la política a menos que se detenga .
Esta política no entrará en conflicto con el
docker run --rm
pero como se explica en la documentación de la ventana acoplable :Entonces, cuando use esta
--restart unless-stopped
política, para asegurarse de que el reinicio esté funcionando en caso de que se detenga por accidente cuando cierre el terminal, haga una vez en otro terminal como se muestra a continuación:Espere hasta que el proceso de eliminación finalice en el shell anterior, luego ciérrelo y simplemente salga ( no salga ).
Y verifique nuevamente en el terminal restante si el contenedor aún se está ejecutando:
Si aún se está ejecutando, puede reiniciar de manera segura y verificar nuevamente que la aplicación se esté reiniciando y ver que su docker esté limpio sin usar múltiples contenedores.
fuente