Docker 服务更新
描述 | 更新服务 |
---|---|
用法 | docker service update [OPTIONS] SERVICE |
群此命令适用于 Swarm 编排器。
描述
按照指定参数的说明更新服务。参数包括
与docker service create
.请参阅描述
了解更多信息。
通常,如果对
service 需要重新创建任务才能生效。例如,仅将--update-parallelism
设置不会重新创建任务,因为各个任务不受此影响
设置。但是,--force
标志将导致重新创建任务。这可用于执行
滚动重启,不更改服务参数。
注意
这是一个集群管理命令,必须在 swarm 上执行 Manager 节点。要了解 Manager 和 worker,请参阅 文档。
选项
选择 | 违约 | 描述 |
---|---|---|
--args | 服务命令 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 资源 | |
--generic-resource-rm | 删除 Generic 资源 | |
--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 | 接口 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 | 接口 1.32+添加自定义主机到 IP 映射 (host:ip ) | |
--host-rm | API 1.25+删除自定义主机到 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 | Suppress progress 输出 | |
--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+分配伪 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
volume 设置为/somewhere
.下一步将更新服务,以同时挂载other-volume
volume 设置为/somewhere-else
volume 中,最后一步卸载/somewhere
安装
点,有效地删除了test-data
卷。每个命令都会返回
服务名称。
这
--mount-add
flag 采用与--mount
标记service create
.请参阅 卷和绑定挂载 中的部分service create
有关详细信息,请参阅。这
--mount-rm
flag 将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
支持相同的--isolation
flag 设置为service create
看service create
以供参考。
更新作业
将服务创建为作业时,将其模式设置为replicated-job
或
自global-job
当做service create
,更新选项包括
有限。
更新 Job 会立即停止任何正在进行的 Task。作 为作业创建一组新的 Task 并有效地重置其完成 地位。如果在更新之前有任何 Task 正在运行,则它们将停止,并且新的 任务已创建。
作业无法转出或回滚。没有用于配置的标志 Update 或 Rollback 设置对 Job 模式有效。
要使用与之前运行的相同参数再次运行作业,它可以
强制更新--force
旗。