Docker 服务更新

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

此命令适用于 Swarm 编排器。

描述

按照指定参数的说明更新服务。参数包括 与docker service create.请参阅描述 了解更多信息。

通常,如果对 service 需要重新创建任务才能生效。例如,仅将--update-parallelism设置不会重新创建任务,因为各个任务不受此影响 设置。但是,--force标志将导致重新创建任务。这可用于执行 滚动重启,不更改服务参数。

注意

这是一个集群管理命令,必须在 swarm 上执行 Manager 节点。要了解 Manager 和 worker,请参阅 文档。

选项

选择违约描述
--args服务命令 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 资源
--generic-resource-rm删除 Generic 资源
--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-interval接口 1.44+在开始期间运行检查之间的时间 (ms|s|m|h)
--health-start-periodAPI 1.29+容器在将重试次数计算为不稳定之前初始化的开始时间 (ms|s|m|h)
--health-timeoutAPI 1.25+允许运行一项检查的最长时间 (ms|s|m|h)
--host-add接口 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, --quietSuppress progress 输出
--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-datavolume 设置为/somewhere.下一步将更新服务,以同时挂载other-volumevolume 设置为/somewhere-elsevolume 中,最后一步卸载/somewhere安装 点,有效地删除了test-data卷。每个命令都会返回 服务名称。

  • --mount-addflag 采用与--mount标记service create.请参阅 卷和绑定挂载 中的部分service create有关详细信息,请参阅。

  • --mount-rmflag 将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用于添加或删除已发布的 port 的服务。您可以使用 docker service create 参考中讨论的 short 或 long 语法。

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

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

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

使用--network-add--network-rm要为其添加或删除网络的标志 一个服务。您可以使用 docker service create 参考中讨论的 short 或 long 语法。

以下示例将新的别名添加到已连接到 network 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支持相同的--isolationflag 设置为service createservice create以供参考。

更新作业

将服务创建为作业时,将其模式设置为replicated-job或 自global-job当做service create,更新选项包括 有限。

更新 Job 会立即停止任何正在进行的 Task。作 为作业创建一组新的 Task 并有效地重置其完成 地位。如果在更新之前有任何 Task 正在运行,则它们将停止,并且新的 任务已创建。

作业无法转出或回滚。没有用于配置的标志 Update 或 Rollback 设置对 Job 模式有效。

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