码头服务更新

描述更新服务
用法docker service update [OPTIONS] SERVICE

Swarm 此命令与 Swarm 协调器配合使用。

描述

按照指定参数的描述更新服务。参数与 相同 docker service create。请参阅那里的描述以获取更多信息。

通常,如果对服务的更改需要重新创建任务才能生效,则更新服务只会导致服务的任务被新任务替换。例如,仅更改 --update-parallelism设置不会重新创建任务,因为各个任务不受此设置的影响。然而,该--force标志无论如何都会导致任务被重新创建。这可用于执行滚动重新启动,而无需更改服务参数。

笔记

这是集群管理命令,必须在 swarm manager 节点上执行。要了解管理器和工作器,请参阅 文档中的Swarm 模式部分。

选项

选项默认描述
--args服务命令参数
--cap-addAPI 1.41+ 添加 Linux 功能
--cap-dropAPI 1.41+ 放弃 Linux 功能
--config-addAPI 1.30+ 添加或更新服务上的配置文件
--config-rmAPI 1.30+ 删除配置文件
--constraint-add添加或更新放置约束
--constraint-rm删除约束
--container-label-add添加或更新容器标签
--container-label-rm通过容器标签的键移除容器标签
--credential-spec托管服务帐户的API 1.29+ 凭据规范(仅限 Windows)
-d, --detachAPI 1.29+ 立即退出而不是等待服务收敛
--dns-addAPI 1.25+ 添加或更新自定义 DNS 服务器
--dns-option-addAPI 1.25+ 添加或更新 DNS 选项
--dns-option-rmAPI 1.25+ 删除 DNS 选项
--dns-rmAPI 1.25+ 删除自定义 DNS 服务器
--dns-search-addAPI 1.25+ 添加或更新自定义 DNS 搜索域
--dns-search-rmAPI 1.25+ 删除 DNS 搜索域
--endpoint-mode端点模式(vip 或 dnsrr)
--entrypoint覆盖图像的默认ENTRYPOINT
--env-add添加或更新环境变量
--env-rm删除环境变量
--forceAPI 1.25+ 即使没有任何更改需要也强制更新
--generic-resource-add添加通用资源
--generic-resource-rm删除通用资源
--group-addAPI 1.25+ 向容器添加额外的补充用户组
--group-rmAPI 1.25+ 从容器中删除之前添加的补充用户组
--health-cmdAPI 1.25+ 运行命令来检查运行状况
--health-intervalAPI 1.25+ 运行检查之间的时间 (ms|s|m|h)
--health-retriesAPI 1.25+ 需要连续失败才能报告不健康
--health-start-intervalAPI 1.44+ 在开始期间运行检查之间的时间 (ms|s|m|h)
--health-start-periodAPI 1.29+ 在对不稳定进行重试计数之前容器初始化的开始时间 (ms|s|m|h)
--health-timeoutAPI 1.25+ 允许运行一项检查的最长时间 (ms|s|m|h)
--host-addAPI 1.32+ 添加自定义主机到 IP 映射 ( host:ip)
--host-rmAPI 1.25+ 删除自定义主机到 IP 映射 ( host:ip)
--hostnameAPI 1.25+ 容器主机名
--image服务形象标签
--initAPI 1.37+ 在每个服务容器内使用 init 来转发信号并获取进程
--isolationAPI 1.35+ 服务容器隔离模式
--label-add添加或更新服务标签
--label-rm通过标签键删除标签
--limit-cpu限制CPU数量
--limit-memory限制内存
--limit-pidsAPI 1.41+ 限制最大进程数(默认 0 = 无限制)
--log-driver记录服务驱动程序
--log-opt记录驱动程序选项
--max-concurrentAPI 1.41+ 同时运行的作业任务数(默认等于--replicas)
--mount-add添加或更新服务上的挂载
--mount-rm按目标路径删除挂载
--network-addAPI 1.29+ 添加网络
--network-rmAPI 1.29+ 删除网络
--no-healthcheckAPI 1.25+ 禁用任何容器指定的 HEALTHCHECK
--no-resolve-imageAPI 1.30+ 不查询注册表来解析图像摘要和支持的平台
--placement-pref-addAPI 1.28+ 添加放置首选项
--placement-pref-rmAPI 1.28+ 删除放置首选项
--publish-add添加或更新已发布的端口
--publish-rm按目标端口删除已发布的端口
-q, --quiet抑制进度输出
--read-onlyAPI 1.28+ 将容器的根文件系统挂载为只读
--replicas任务数量
--replicas-max-per-nodeAPI 1.40+ 每个节点的最大任务数(默认 0 = 无限制)
--reserve-cpu预留CPU
--reserve-memory预留内存
--restart-condition满足条件时重新启动 ( none, on-failure, any)
--restart-delay重新启动尝试之间的延迟 (ns|us|ms|s|m|h)
--restart-max-attempts放弃前最大重启次数
--restart-window用于评估重启策略的窗口 (ns|us|ms|s|m|h)
--rollbackAPI 1.25+ 回滚到之前的规范
--rollback-delayAPI 1.28+ 任务回滚之间的延迟 (ns|us|ms|s|m|h)
--rollback-failure-actionAPI 1.28+ 回滚失败时的操作 ( pause, continue)
--rollback-max-failure-ratioAPI 1.28+ 回滚期间可容忍的故障率
--rollback-monitorAPI 1.28+ 每个任务回滚后监视失败的持续时间 (ns|us|ms|s|m|h)
--rollback-orderAPI 1.29+ 回滚订单 ( start-first, stop-first)
--rollback-parallelismAPI 1.28+ 同时回滚的最大任务数(0表示一次全部回滚)
--secret-addAPI 1.25+ 添加或更新服务上的机密
--secret-rmAPI 1.25+ 删除秘密
--stop-grace-period强制杀死容器之前等待的时间 (ns|us|ms|s|m|h)
--stop-signalAPI 1.28+ 停止容器的信号
--sysctl-addAPI 1.40+ 添加或更新 Sysctl 选项
--sysctl-rmAPI 1.40+ 删除 Sysctl 选项
-t, --ttyAPI 1.25+ 分配伪 TTY
--ulimit-addAPI 1.41+ 添加或更新 ulimit 选项
--ulimit-rmAPI 1.41+ 删除 ulimit 选项
--update-delay更新之间的延迟 (ns|us|ms|s|m|h)
--update-failure-action更新失败时的操作 ( pause, continue, rollback)
--update-max-failure-ratioAPI 1.25+ 更新期间可容忍的失败率
--update-monitorAPI 1.25+ 每个任务更新后监视失败的持续时间 (ns|us|ms|s|m|h)
--update-orderAPI 1.29+ 更新订单 ( start-first, stop-first)
--update-parallelism同时更新的最大任务数(0 表示一次更新所有任务)
-u, --user用户名或 UID(格式:<name|uid>[:<group|gid>])
--with-registry-auth将注册表身份验证详细信息发送给 Swarm 代理
-w, --workdir容器内的工作目录

例子

更新服务

$ docker service update --limit-cpu 2 redis

执行滚动重启而不更改参数

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

在此示例中,该--force标志导致服务的任务被关闭并替换为新的任务,即使其他参数通常不会导致这种情况发生。该--update-parallelism 1设置可确保一次仅替换一个任务(这是默认行为)。该 --update-delay 30s设置在任务之间引入了 30 秒的延迟,以便滚动重启逐渐发生。

添加或删除安装(--mount-add、--mount-rm)

使用--mount-add--mount-rm选项添加或删除服务的绑定安装或卷。

以下示例创建一个将test-data卷安装到 的 服务/somewhere。下一步更新服务以将other-volume 卷安装到/somewhere-else卷,最后一步卸载/somewhere安装点,从而有效地删除test-data卷。每个命令都会返回服务名称。

  • 该标志采用与上的标志 --mount-add相同的参数。有关详细信息,请参阅 参考中的卷和绑定安装 部分。--mountservice createservice create

  • 旗帜--mount-rm采用target坐骑的路径。

$ 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

添加或删除已发布的服务端口(--publish-add、--publish-rm)

使用--publish-add--publish-rm标志添加或删除服务的已发布端口。您可以使用docker service create参考中讨论的短语法或长语法 。

以下示例将已发布的服务端口添加到现有服务。

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

添加或删除网络(--network-add、--network-rm)

使用--network-add--network-rm标志添加或删除服务的网络。您可以使用docker service create参考中讨论的短语法或长语法 。

以下示例将新别名添加到已连接到网络 my-network 的现有服务:

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

回滚到服务的先前版本(--rollback)

使用该--rollback选项可回滚到服务的先前版本。

这会将服务恢复到最近命令之前的配置docker service update

以下示例将服务的副本数从 4 更新为 5,然后回滚到之前的配置。

$ docker service update --replicas=5 web

web

$ docker service ls

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

以下示例回滚web服务:

$ docker service update --rollback web

web

$ docker service ls

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

也可以结合其他选项--rollback,例如,--update-delay 0s在任务之间无延迟地执行回滚:

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

web

服务还可以设置为在更新失败时自动回滚到以前的版本。要设置自动回滚服务,请使用 --update-failure-action=rollback。如果更新失败的任务比例超过 给定的值,将触发回滚 --update-max-failure-ratio

回滚操作的速率、并行度和其他参数由使用以下标志传递的值确定:

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

例如,设置的服务--update-parallelism 1 --rollback-parallelism 3 在正常更新期间将一次更新一个任务,但在回滚期间,一次将回滚 3 个任务。在自动回滚期间和使用 手动启动的回滚期间都会遵守这些回滚参数--rollback

添加或删除机密(--secret-add、--secret-rm)

使用--secret-add--secret-rm选项添加或删除服务的机密。

以下示例添加一个名为 的密钥ssh-2并删除ssh-1

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

使用模板更新服务

一些标志service update支持使用模板。请参阅 service create参考。

在 Windows 上指定隔离模式 (--isolation)

service update支持--isolationservice create 参考 相同的标志service create

更新职位

当服务被创建为作业时,通过将其模式设置为replicated-jobglobal-job时执行service create,更新它的选项会受到限制。

更新作业会立即停止任何正在进行的任务。该操作为作业创建一组新的任务并有效地重置其完成状态。如果更新之前有任何任务正在运行,它们将被停止,并创建新任务。

作业无法推出或回滚。用于配置更新或回滚设置的标志对于作业模式均无效。

要使用之前运行的相同参数再次运行作业,可以使用该--force标志强制更新它。