¿Alguien sabe si hay una manera de hacer que el enjambre de docker reinicie un servicio que es parte de una pila sin reiniciar toda la pila?
Respuestas:
Hacerlo de docker stack deploy
nuevo para mí es el camino a seguir para actualizar los servicios. Como Respuesta de Francois , y también en mi propia experiencia, al hacerlo, solo se actualizan los servicios que deben actualizarse.
Pero a veces, al probar cosas, parece más fácil reiniciar un solo servicio. En mi caso, tuve que borrar el volumen y actualizar el servicio para iniciarlo como si estuviera nuevo. No estoy seguro de si hay desventajas en el método que describiré. Lo probé en mi pila de desarrollo y funcionó muy bien para mí.
Obtenga la identificación del servicio que desea eliminar y luego úselo docker service update --force <id>
para forzar la actualización del servicio que lo vuelve a implementar de manera efectiva
$ docker stack services <stack_name>
ID NAME ...
3xrdy2c7pfm3 stack-name_api ...
$ docker service update --force 3xrdy2c7pfm3
La --force
bandera forzará la actualización del servicio y se reiniciará.
Escalar a 0 y realizar una copia de seguridad:
docker service scale myservice=0
docker service scale myservice=10
Mirando la docker stack
documentación:
Descripción ampliada
Cree y actualice una pila a partir de un archivo de composición o dab en el enjambre
De este artículo de blog : docker stack
funciona de manera similar a docker compose
. Es idempotente . Si la pila ya está implementada, docker stack deploy
reiniciará solo aquellos servicios que tengan el resumen o la etiqueta que se actualizó:
Según mi experiencia, cuando vuelvo a implementar la misma pila con un cambio de servicio, solo se reiniciará el servicio actualizado .
PERO ... parece haber algunas limitaciones para los cambios que se tienen en cuenta (algunos informan errores con etiquetas de imagen ), así que pruébelo y vea si funciona como se esperaba.
También puede usarlo service update
si desea asegurarse de que solo el servicio dirigido si se actualiza con sus cambios.
service update
documentación, podría agregar / eliminar env
variables para falsificarlo si no hay una forma integrada.
docker stack deploy
no iniciaría un servicio (openldap). No pude encontrar un archivo de registro. docker-compose run <service>
pondría en marcha el contenedor sin problema. Finalmente, docker service update --force <servce>
funcionó.
Según el ejemplo en la documentación para actualizaciones continuas:
$ docker service update --image redis: 3.0.7 redis
Sin embargo, eso solo funciona si su imagen ya está en las máquinas locales. De lo contrario, debe usar --with-registry-auth para enviar los detalles de autenticación del registro a los agentes del enjambre. Consulte los detalles en la documentación de actualización del servicio de Docker.
$ docker service update --with-registry-auth --image redis: 3.0.7 redis
eliminarlo:
docker stack rm stack_name
redistribuirlo:
docker stack deploy -c docker-compose.yml stack_name