Compartir comentarios
Las respuestas se generan en base a la documentación.

docker service update

DescripciónActualiza un servicio
Usodocker service update [OPTIONS] SERVICE

Swarm Este comando funciona con el orquestador de Swarm.

Descripción

Actualiza un servicio según lo descrito por los parámetros especificados. Los parámetros son los mismos que en docker service create. Consulta la descripción allí para obtener más información.

Normalmente, la actualización de un servicio solo hará que las tareas del servicio sean reemplazadas por otras nuevas si un cambio en el servicio requiere recrear las tareas para que tenga efecto. Por ejemplo, solo cambiar la configuración de --update-parallelism no recreará las tareas, porque las tareas individuales no se ven afectadas por esta configuración. Sin embargo, el flag --force hará que las tareas se recreen de todos modos. Esto se puede utilizar para realizar un reinicio continuo (rolling restart) sin realizar cambios en los parámetros del servicio.

Note

Este es un comando de gestión de clústeres y debe ejecutarse en un nodo administrador de Swarm (manager node). Para obtener más información sobre administradores y trabajadores, consulta la sección del modo Swarm en la documentación.

Opciones

OpciónPredeterminadoDescripción
--argsArgumentos del comando del servicio
--cap-addAPI 1.41+ Añade capacidades de Linux
--cap-dropAPI 1.41+ Elimina capacidades de Linux
--config-addAPI 1.30+ Añade o actualiza un archivo de configuración en un servicio
--config-rmAPI 1.30+ Elimina un archivo de configuración
--constraint-addAñade o actualiza una restricción de ubicación
--constraint-rmElimina una restricción
--container-label-addAñade o actualiza una etiqueta del contenedor
--container-label-rmElimina una etiqueta del contenedor por su clave
--credential-specAPI 1.29+ Especificación de credenciales para cuenta de servicio administrada (solo Windows)
-d, --detachAPI 1.29+ Sale inmediatamente en lugar de esperar a que el servicio converja
--dns-addAPI 1.25+ Añade o actualiza un servidor DNS personalizado
--dns-option-addAPI 1.25+ Añade o actualiza una opción de DNS
--dns-option-rmAPI 1.25+ Elimina una opción de DNS
--dns-rmAPI 1.25+ Elimina un servidor DNS personalizado
--dns-search-addAPI 1.25+ Añade o actualiza un dominio de búsqueda DNS personalizado
--dns-search-rmAPI 1.25+ Elimina un dominio de búsqueda DNS
--endpoint-modeModo de endpoint (vip o dnsrr)
--entrypointSobrescribe el ENTRYPOINT por defecto de la imagen
--env-addAñade o actualiza una variable de entorno
--env-rmElimina una variable de entorno
--forceAPI 1.25+ Fuerza la actualización incluso si ningún cambio lo requiere
--generic-resource-addAPI 1.32+ Añade un recurso genérico
--generic-resource-rmAPI 1.32+ Elimina un recurso genérico
--group-addAPI 1.25+ Añade un grupo de usuarios suplementario adicional al contenedor
--group-rmAPI 1.25+ Elimina del contenedor un grupo de usuarios suplementario añadido previamente
--health-cmdAPI 1.25+ Comando a ejecutar para comprobar el estado de salud
--health-intervalAPI 1.25+ Tiempo entre ejecuciones de la comprobación (ms|s|m|h)
--health-retriesAPI 1.25+ Fallos consecutivos necesarios para reportar un estado insalubre
--health-start-intervalAPI 1.44+ Tiempo entre ejecuciones de la comprobación durante el período de inicio (ms|s|m|h)
--health-start-periodAPI 1.29+ Período de inicio para que el contenedor se inicialice antes de comenzar la cuenta regresiva de reintentos de salud (ms|s|m|h)
--health-timeoutAPI 1.25+ Tiempo máximo permitido para que se ejecute una comprobación (ms|s|m|h)
--host-addAPI 1.25+ Añade una asociación de host a IP personalizada (host:ip)
--host-rmAPI 1.25+ Elimina una asociación de host a IP personalizada (host:ip)
--hostnameAPI 1.25+ Nombre de host del contenedor
--imageEtiqueta de la imagen del servicio
--initAPI 1.37+ Utiliza un proceso init dentro de cada contenedor del servicio para reenviar señales y adoptar procesos huérfanos
--isolationAPI 1.35+ Modo de aislamiento del contenedor del servicio
--label-addAñade o actualiza una etiqueta del servicio
--label-rmElimina una etiqueta por su clave
--limit-cpuLimita las CPUs
--limit-memoryLimita la memoria
--limit-pidsAPI 1.41+ Limita el número máximo de procesos (por defecto 0 = ilimitado)
--log-driverControlador de registro para el servicio
--log-optOpciones del controlador de registro
--max-concurrentAPI 1.41+ Número de tareas de trabajo a ejecutar simultáneamente (por defecto es igual a --replicas)
--memory-swapAPI 1.52+ Bytes de intercambio (swap) (-1 para ilimitado)
--memory-swappiness-1API 1.52+ Ajusta la tendencia al intercambio (swappiness) de memoria (0-100), -1 para restablecer al valor predeterminado
--mount-addAñade o actualiza un montaje en un servicio
--mount-rmElimina un montaje por su ruta de destino
--network-addAPI 1.29+ Añade una red
--network-rmAPI 1.29+ Elimina una red
--no-healthcheckAPI 1.25+ Deshabilita cualquier HEALTHCHECK especificado por el contenedor
--no-resolve-imageAPI 1.30+ No consulta el registro para resolver el digest de la imagen y las plataformas compatibles
--oom-score-adjAPI 1.46+ Ajusta las preferencias OOM del host (-1000 a 1000)
--placement-pref-addAPI 1.28+ Añade una preferencia de ubicación
--placement-pref-rmAPI 1.28+ Elimina una preferencia de ubicación
--publish-addAñade o actualiza un puerto publicado
--publish-rmElimina un puerto publicado por su puerto de destino
-q, --quietSuprime la salida del progreso
--read-onlyAPI 1.28+ Monta el sistema de archivos raíz del contenedor como de solo lectura
--replicasNúmero de tareas
--replicas-max-per-nodeAPI 1.40+ Número máximo de tareas por nodo (por defecto 0 = ilimitado)
--reserve-cpuReserva CPUs
--reserve-memoryReserva memoria
--restart-conditionReinicia cuando se cumple la condición (none, on-failure, any)
--restart-delayRetraso entre intentos de reinicio (ns|us|ms|s|m|h)
--restart-max-attemptsNúmero máximo de reinicios antes de darse por vencido
--restart-windowVentana de tiempo utilizada para evaluar la política de reinicio (ns|us|ms|s|m|h)
--rollbackAPI 1.25+ Revierte a la especificación anterior
--rollback-delayAPI 1.28+ Retraso entre reversiones (rollbacks) de tareas (ns|us|ms|s|m|h)
--rollback-failure-actionAPI 1.28+ Acción ante un fallo en la reversión (rollback) (pause, continue)
--rollback-max-failure-ratioAPI 1.28+ Tasa de fallos tolerada durante una reversión (rollback)
--rollback-monitorAPI 1.28+ Duración después de cada reversión (rollback) de tarea para monitorear fallos (ns|us|ms|s|m|h)
--rollback-orderAPI 1.29+ Orden de reversión (rollback) (start-first, stop-first)
--rollback-parallelismAPI 1.28+ Número máximo de tareas revertidas (rolled back) simultáneamente (0 para revertir todas a la vez)
--secret-addAPI 1.25+ Añade o actualiza un secreto en un servicio
--secret-rmAPI 1.25+ Elimina un secreto
--stop-grace-periodTiempo a esperar antes de forzar la finalización de un contenedor (ns|us|ms|s|m|h)
--stop-signalAPI 1.28+ Señal para detener el contenedor
--sysctl-addAPI 1.40+ Añade o actualiza una opción de Sysctl
--sysctl-rmAPI 1.40+ Elimina una opción de Sysctl
-t, --ttyAPI 1.25+ Asigna un pseudo-TTY
--ulimit-addAPI 1.41+ Añade o actualiza una opción de ulimit
--ulimit-rmAPI 1.41+ Elimina una opción de ulimit
--update-delayRetraso entre actualizaciones (ns|us|ms|s|m|h)
--update-failure-actionAcción ante un fallo en la actualización (pause, continue, rollback)
--update-max-failure-ratioAPI 1.25+ Tasa de fallos tolerada durante una actualización
--update-monitorAPI 1.25+ Duración después de cada actualización de tarea para monitorear fallos (ns|us|ms|s|m|h)
--update-orderAPI 1.29+ Orden de actualización (start-first, stop-first)
--update-parallelismNúmero máximo de tareas actualizadas simultáneamente (0 para actualizar todas a la vez)
-u, --userNombre de usuario o UID (formato: <nombre|uid>[:<grupo|gid>])
--with-registry-authEnvía detalles de autenticación del registro a los agentes de swarm
-w, --workdirDirectorio de trabajo dentro del contenedor

Ejemplos

Actualizar un servicio

$ docker service update --limit-cpu 2 redis

Realizar un reinicio continuo (rolling restart) sin cambios en los parámetros

$ docker service update --force --update-parallelism 1 --update-delay 30s redis

En este ejemplo, el flag --force hace que las tareas del servicio se detengan y sean reemplazadas por otras nuevas, aunque normalmente ninguno de los otros parámetros provocaría que eso sucediera. La opción --update-parallelism 1 asegura que solo se reemplace una tarea a la vez (este es el comportamiento predeterminado). La opción --update-delay 30s introduce un retraso de 30 segundos entre tareas, de modo que el reinicio continuo se realice de manera gradual.

Añadir o eliminar montajes (--mount-add, --mount-rm)

Utiliza las opciones --mount-add o --mount-rm para añadir o eliminar montajes vinculados (bind mounts) o volúmenes de un servicio.

El siguiente ejemplo crea un servicio que monta el volumen test-data en /somewhere. El paso siguiente actualiza el servicio para montar también el volumen other-volume en /somewhere-else. El último paso desmonta el punto de montaje /somewhere, eliminando eficazmente el volumen test-data. Cada comando devuelve el nombre del servicio.

  • El flag --mount-add toma los mismos parámetros que el flag --mount en service create. Consulta la sección de volúmenes y montajes vinculados en la referencia de service create para obtener más detalles.

  • El flag --mount-rm toma la ruta de destino (target) del montaje.

$ docker service create \
    --name=myservice \
    --mount type=volume,source=test-data,target=/somewhere \
    nginx:alpine

myservice

$ docker service update \
    --mount-add type=volume,source=other-volume,target=/somewhere-else \
    myservice

myservice

$ docker service update --mount-rm /somewhere myservice

myservice

Añadir o eliminar puertos de servicio publicados (--publish-add, --publish-rm)

Utiliza los flags --publish-add o --publish-rm para añadir o eliminar un puerto publicado para un servicio. Puedes utilizar la sintaxis corta o larga descrita en la referencia de docker service create.

El siguiente ejemplo añade un puerto de servicio publicado a un servicio existente.

$ docker service update \
  --publish-add published=8080,target=80 \
  myservice

Añadir o eliminar red (--network-add, --network-rm)

Utiliza los flags --network-add o --network-rm para añadir o eliminar una red para un servicio. Puedes utilizar la sintaxis corta o larga descrita en la referencia de docker service create.

El siguiente ejemplo añade un nuevo nombre de alias a un servicio existente que ya está conectado a la red my-network:

$ docker service update \
  --network-rm my-network \
  --network-add name=my-network,alias=web1 \
  myservice

Revertir a la versión anterior de un servicio (--rollback)

Utiliza la opción --rollback para revertir a la versión anterior del servicio.

Esto restaurará el servicio a la configuración que tenía antes del comando docker service update más reciente.

El siguiente ejemplo actualiza el número de réplicas para el servicio de 4 a 5, y luego revierte a la configuración anterior.

$ docker service update --replicas=5 web

web

$ docker service ls

ID            NAME  MODE        REPLICAS  IMAGE
80bvrzp6vxf3  web   replicated  0/5       nginx:alpine

El siguiente ejemplo revierte el servicio web:

$ docker service update --rollback web

web

$ docker service ls

ID            NAME  MODE        REPLICAS  IMAGE
80bvrzp6vxf3  web   replicated  0/4       nginx:alpine

También se pueden combinar otras opciones con --rollback, por ejemplo, --update-delay 0s para ejecutar la reversión sin retraso entre tareas:

$ docker service update \
  --rollback \
  --update-delay 0s \
  web

web

Los servicios también se pueden configurar para revertirse a la versión anterior automáticamente cuando falla una actualización. Para configurar un servicio para la reversión automática, utiliza --update-failure-action=rollback. Se activará una reversión si la fracción de las tareas que no se actualizaron correctamente supera el valor proporcionado con --update-max-failure-ratio.

La velocidad, el paralelismo y otros parámetros de una operación de reversión se determinan por los valores pasados con los siguientes flags:

  • --rollback-delay
  • --rollback-failure-action
  • --rollback-max-failure-ratio
  • --rollback-monitor
  • --rollback-parallelism

Por ejemplo, un servicio configurado con --update-parallelism 1 --rollback-parallelism 3 actualizará una tarea a la vez durante una actualización normal, pero durante una reversión, se revertirán 3 tareas a la vez. Estos parámetros de reversión se respetan tanto durante las reversiones automáticas como para las reversiones iniciadas manualmente utilizando --rollback.

Añadir o eliminar secretos (--secret-add, --secret-rm)

Utiliza las opciones --secret-add o --secret-rm para añadir o eliminar secretos de un servicio.

El siguiente ejemplo añade un secreto llamado ssh-2 y elimina ssh-1:

$ docker service update \
    --secret-add source=ssh-2,target=ssh-2 \
    --secret-rm ssh-1 \
    myservice

Actualizar servicios utilizando plantillas

Algunos flags de service update admiten el uso de plantillas. Consulta service create para obtener la referencia.

Especificar el modo de aislamiento en Windows (--isolation)

service update admite el mismo flag --isolation que service create. Consulta service create para obtener la referencia.

Actualizar trabajos (Jobs)

Cuando un servicio se crea como un trabajo, estableciendo su modo a replicated-job o a global-job al hacer service create, las opciones para actualizarlo están limitadas.

La actualización de un trabajo detiene inmediatamente cualquier tarea que esté en progreso. La operación crea un nuevo conjunto de tareas para el trabajo y restablece eficazmente su estado de finalización. Si había tareas ejecutándose antes de la actualización, estas se detienen y se crean nuevas tareas.

Los trabajos no se pueden implementar ni revertir progresivamente. Ninguno de los flags para configurar los ajustes de actualización o reversión es válido con los modos de trabajo.

Para ejecutar un trabajo de nuevo con los mismos parámetros que se ejecutó anteriormente, se puede forzar su actualización con el flag --force.