docker service update
描述 | 更新服务 |
---|---|
用法 | docker service update [选项] 服务 |
Swarm 此命令适用于 Swarm 编排器。
描述
根据指定的参数更新服务。这些参数与 docker service create
命令相同。有关更多信息,请参阅该命令的描述。
通常,只有当服务的更改需要重新创建任务才能生效时,更新服务才会导致服务的任务被新的任务替换。例如,仅更改 --update-parallelism
设置不会重新创建任务,因为单个任务不受此设置的影响。但是,--force
标志会强制重新创建任务。这可以用于在不更改任何服务参数的情况下执行滚动重启。
注意
这是一个集群管理命令,必须在 Swarm 管理节点上执行。要了解有关管理器和工作节点的更多信息,请参阅文档中的 Swarm 模式部分。
选项
选项 | 默认值 | 描述 |
---|---|---|
--args | 服务命令参数 | |
--cap-add | API 1.41+ 添加 Linux 能力 | |
--cap-drop | API 1.41+ 移除 Linux 能力 | |
--config-add | API 1.30+ 在服务上添加或更新配置文件 | |
--config-rm | API 1.30+ 移除配置文件 | |
--constraint-add | 添加或更新放置约束 | |
--constraint-rm | 移除约束 | |
--container-label-add | 添加或更新容器标签 | |
--container-label-rm | 按其键移除容器标签 | |
--credential-spec | API 1.29+ 用于托管服务账户的凭证规范(仅限 Windows) | |
-d, --detach | API 1.29+ 立即退出,而不是等待服务收敛 | |
--dns-add | API 1.25+ 添加或更新自定义 DNS 服务器 | |
--dns-option-add | API 1.25+ 添加或更新 DNS 选项 | |
--dns-option-rm | API 1.25+ 移除 DNS 选项 | |
--dns-rm | API 1.25+ 移除自定义 DNS 服务器 | |
--dns-search-add | API 1.25+ 添加或更新自定义 DNS 搜索域 | |
--dns-search-rm | API 1.25+ 移除 DNS 搜索域 | |
--endpoint-mode | 端点模式 (vip 或 dnsrr) | |
--entrypoint | 覆盖镜像的默认 ENTRYPOINT | |
--env-add | 添加或更新环境变量 | |
--env-rm | 移除环境变量 | |
--force | API 1.25+ 即使没有需要更改的参数也强制更新 | |
--generic-resource-add | 添加通用资源 | |
--generic-resource-rm | 移除通用资源 | |
--group-add | API 1.25+ 向容器添加一个额外的辅助用户组 | |
--group-rm | API 1.25+ 从容器中移除先前添加的辅助用户组 | |
--health-cmd | API 1.25+ 用于检查健康状况的命令 | |
--health-interval | API 1.25+ 运行检查之间的时间间隔 (ms|s|m|h) | |
--health-retries | API 1.25+ 报告不健康所需的连续失败次数 | |
--health-start-interval | API 1.44+ 启动期间运行检查之间的时间间隔 (ms|s|m|h) | |
--health-start-period | API 1.29+ 容器初始化阶段,在此期间的重试不会计入不稳定性 (ms|s|m|h) | |
--health-timeout | API 1.25+ 允许一次检查运行的最长时间 (ms|s|m|h) | |
--host-add | API 1.32+ 添加自定义 host-to-IP 映射 (host:ip ) | |
--host-rm | API 1.25+ 移除自定义 host-to-IP 映射 (host:ip ) | |
--hostname | API 1.25+ 容器主机名 | |
--image | 服务镜像标签 | |
--init | API 1.37+ 在每个服务容器内使用 init 来转发信号和回收进程 | |
--isolation | API 1.35+ 服务容器隔离模式 | |
--label-add | 添加或更新服务标签 | |
--label-rm | 按其键移除标签 | |
--limit-cpu | 限制 CPU | |
--limit-memory | 限制内存 | |
--limit-pids | API 1.41+ 限制最大进程数(默认为 0 = 无限制) | |
--log-driver | 服务的日志驱动程序 | |
--log-opt | 日志驱动程序选项 | |
--max-concurrent | API 1.41+ 同时运行的作业任务数量(默认为 --replicas 的数量) | |
--mount-add | 在服务上添加或更新挂载 | |
--mount-rm | 按其目标路径移除挂载 | |
--network-add | API 1.29+ 添加网络 | |
--network-rm | API 1.29+ 移除网络 | |
--no-healthcheck | API 1.25+ 禁用容器指定的任何 HEALTHCHECK | |
--no-resolve-image | API 1.30+ 不查询注册表来解析镜像摘要和支持的平台 | |
--oom-score-adj | API 1.46+ 调整主机的 OOM 偏好设置 (-1000 到 1000) | |
--placement-pref-add | API 1.28+ 添加放置偏好 | |
--placement-pref-rm | API 1.28+ 移除放置偏好 | |
--publish-add | 添加或更新发布端口 | |
--publish-rm | 按其目标端口移除发布端口 | |
-q, --quiet | 抑制进度输出 | |
--read-only | API 1.28+ 将容器的根文件系统挂载为只读 | |
--replicas | 任务数量 | |
--replicas-max-per-node | API 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) | |
--rollback | API 1.25+ 回滚到先前的配置 | |
--rollback-delay | API 1.28+ 任务回滚之间的延迟 (ns|us|ms|s|m|h) | |
--rollback-failure-action | API 1.28+ 回滚失败时的操作(pause , continue ) | |
--rollback-max-failure-ratio | API 1.28+ 回滚期间可容忍的失败率 | |
--rollback-monitor | API 1.28+ 每个任务回滚后监控失败的时间 (ns|us|ms|s|m|h) | |
--rollback-order | API 1.29+ 回滚顺序(start-first , stop-first ) | |
--rollback-parallelism | API 1.28+ 同时回滚的最大任务数量(0 表示一次回滚所有任务) | |
--secret-add | API 1.25+ 在服务上添加或更新密钥 | |
--secret-rm | API 1.25+ 移除密钥 | |
--stop-grace-period | 强制终止容器前等待的时间 (ns|us|ms|s|m|h) | |
--stop-signal | API 1.28+ 停止容器的信号 | |
--sysctl-add | API 1.40+ 添加或更新 Sysctl 选项 | |
--sysctl-rm | API 1.40+ 移除 Sysctl 选项 | |
-t, --tty | API 1.25+ 分配伪终端 (pseudo-TTY) | |
--ulimit-add | API 1.41+ 添加或更新 ulimit 选项 | |
--ulimit-rm | API 1.41+ 移除 ulimit 选项 | |
--update-delay | 两次更新之间的延迟 (ns|us|ms|s|m|h) | |
--update-failure-action | 更新失败时的操作(pause , continue , rollback ) | |
--update-max-failure-ratio | API 1.25+ 更新期间可容忍的失败率 | |
--update-monitor | API 1.25+ 每个任务更新后监控失败的时间 (ns|us|ms|s|m|h) | |
--update-order | API 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
标志需要挂载的目标路径。
$ 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
支持与 service create
相同的 --isolation
标志。有关参考,请参阅 service create
。
更新 Job
当服务创建为 job 时(通过在执行 service create
时将其模式设置为 replicated-job
或 global-job
),更新它的选项是有限的。
更新 Job 会立即停止任何正在进行的任务 (Tasks)。此操作会为该 job 创建一组新的任务 (Tasks),并有效重置其完成状态。如果在更新之前有任何任务 (Tasks) 正在运行,它们将被停止,并创建新的任务 (Tasks)。
Job 无法进行滚动更新 (rolled out) 或回滚 (rolled back)。配置更新或回滚设置的任何标志对于 job 模式都无效。
要使用之前运行时的相同参数再次运行 job,可以使用 --force
标志进行强制更新。