docker service update

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

Swarm 此命令适用于 Swarm 调度器。

描述

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

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

注意

这是一个集群管理命令,必须在 Swarm 管理节点上执行。要了解管理节点和工作节点,请参阅文档中的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-specAPI 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+不要查询注册表以解析镜像摘要和支持的平台
--oom-score-adjAPI 1.46+ 调整宿主机的 OOM 优先级 (-1000 到 1000)
--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满足条件时重启(noneon-failureany
--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更新失败时的操作(pausecontinuerollback
--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 标志采用与 service create 上的 --mount 标志相同的参数。有关详细信息,请参阅 service 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 的 secret,并移除了 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 支持与 service create 相同的 --isolation 标志 参见 service create 获取参考。

更新任务

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

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

Job 无法执行滚动发布或回滚。所有用于配置更新或回滚设置的标志在 Job 模式下均无效。

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