Tengo una duda sobre el uso de los comandos del modo docker swarm para actualizar los servicios existentes después de haber implementado un conjunto de servicios usando docker stack deploy . Por lo que entendí, cada servicio está anclado al resumen SHA256 de la imagen en el momento de la creación, por lo que si reconstruye y envía una imagen (con la misma etiqueta) e intenta ejecutar una docker service update , la imagen del servicio no se actualiza ( incluso si SHA256 es diferente). Por el contrario, si vuelve a ejecutar un docker stack deploy , todos los servicios se actualizan con las nuevas imágenes. Logré actualizar la imagen del servicio también usando docker service update --image repository/image:tag <service> . ¿Es este el comportamiento normal de estos comandos o hay algo que no entendí?
Estoy usando Docker 17.03.1-ce
La documentación de implementación de la pila de Docker dice: "Cree y actualice una pila a partir de un archivo de composición o dab en el enjambre. Este comando debe ejecutarse apuntando a un nodo de administrador". Entonces, el comportamiento que describiste es el esperado.
La documentación de actualización del servicio Docker no es tan clara, pero usted mismo dijo que solo se ejecuta con --image repository/image:tag <service> por lo que la bandera es necesaria para actualizar la imagen.
Tienes dos formas de lograr lo que quieres.
Es un comportamiento normal y esperado para la docker stack deploy para actualizar las imágenes de los servicios existentes a cualquier hash que esté vinculado a la etiqueta especificada.
Si no hay una etiqueta presente, se asume la latest , lo que a veces puede ser problemático, ya que la mayoría de las personas no entienden bien la etiqueta latest y, por lo tanto, conduce a algunos resultados inesperados.