1、docker service update 简介
docker service update
命令是用于更新 Docker Swarm 中的服务配置。它允许你修改服务的各种属性,如镜像、环境变量、副本数等。
该命令与Swarm编排器一起工作。
更新一个服务,根据指定的参数进行描述。这些参数与 docker service create
相同。进一步的信息请参考 docker service create
的描述。
通常情况下,更新一个服务只会在需要重新创建任务以使更改生效时,才会导致服务的任务被替换为新的任务。例如,仅更改 --update-parallelism 设置不会重新创建任务,因为这个设置不会影响到各个任务。然而,使用 --force 标志将无论如何导致任务被重新创建。这可以用于执行滚动重启而不对服务参数进行任何更改。
注意:
此命令是一个集群管理命令,必须在 Swarm 管理节点上执行。有关管理节点和工作节点的详细信息,请参阅文档中的 Swarm 模式部分。
参考文档:https://docs.docker.com/engine/reference/commandline/service_update/
2、docker service update 语法
docker service update [OPTIONS] SERVICE
3、docker service update 命令
1)更新服务
docker service update --limit-cpu 2 redis
2)使用没有参数变化的滚动重启
docker service update --force --update-parallelism 1 --update-delay 30s redis
在此示例中,--force
标志导致服务的任务被关闭并替换为新任务,即使其他参数通常不会导致发生这种情况。--update-parallelism 1
设置确保每次只替换一个任务(这是默认行为)。--update-delay 30s
设置在任务之间引入30秒的延迟,以便进行逐步的滚动重启。
3)添加或移除挂载 (--mount-add,--mount-rm)
使用 --mount-add
或 --mount-rm
选项添加或移除服务的绑定挂载或卷。
以下示例创建一个服务,将 test-data 卷挂载到 /somewhere。下一步更新服务,将 other-volume 卷也挂载到 /somewhere-else。最后一步卸载 /somewhere 挂载点,从而有效地移除 test-data 卷。每个命令都返回服务名称。
--mount-add
标志接受与服务创建参考中的 --mount
标志相同的参数。有关详细信息,请参阅服务创建参考中的卷和绑定挂载部分。
--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
4)添加或移除已发布的服务端口 (--publish-add,--publish-rm)
使用 --publish-add
或 --publish-rm
标志为服务添加或移除已发布的端口。您可以使用 docker service create
参考中讨论的短语法或长语法。
以下示例向现有服务添加已发布的服务端口。
docker service update \ --publish-add published=8080,target=80 \ myservice
5)添加或移除网络 (--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
6)回滚到服务的上一个版本 (--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 手动发起的回滚中都会被尊重。
7)添加或移除密钥信息 (--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
8)使用模板更新服务
某些服务更新的标志支持使用模板。有关详情,请参阅服务创建参考。
9)在 Windows 上指定隔离模式 (--isolation)
service update 支持与 service create 相同的 --isolation
标志。有关详情,请参阅服务创建参考。
10)更新作业
当将服务作为作业创建时,通过在 service create 中将其模式设置为 replicated-job 或 global-job,其更新选项会受到限制。
更新作业会立即停止所有正在进行中的任务。该操作会为作业创建一组新任务,并有效地重置其完成状态。如果更新之前有任何任务正在运行,它们将被停止,并创建新的任务。
作业无法进行滚动升级或回滚。在作业模式下,无法使用任何配置更新或回滚设置的标志。
要以与之前运行作业时相同的参数再次运行作业,可以使用 --force 标志进行强制更新。
4、命令选项
名称 | 默认值 | 描述 |
--args | 服务命令参数 | |
--cap-add | API 1.41+ | 添加 Linux 权限 |
--cap-drop | API 1.41+ | 移除 Linux 权限 |
--config-add | API 1.41+ | 添加或更新服务的配置文件 |
--config-rm | API 1.41+ | 移除配置文件 |
--constraint-add | 添加或更新放置约束 | |
--constraint-rm | 移除约束 | |
--container-label-add | 添加或更新容器标签 | |
--container-label-rm | 移除容器标签 | |
--credential-spec | 托管服务账户的凭证规范(仅适用于 Windows) | |
--detach, -d | 立即退出而不等待服务完成 | |
--dns-add | 添加或更新自定义 DNS 服务器 | |
--dns-option-add | 添加或更新 DNS 选项 | |
--dns-option-rm | 移除 DNS 选项 | |
--dns-rm | 移除自定义 DNS 服务器 | |
--dns-search-add | 添加或更新自定义 DNS 搜索域 | |
--dns-search-rm | 移除 DNS 搜索域 | |
--endpoint-mode | 端点模式(vip 或 dnsrr) | |
--entrypoint | 覆盖镜像的默认 ENTRYPOINT | |
--env-add | 添加或更新环境变量 | |
--env-rm | 移除环境变量 | |
--force | 强制更新即使没有变更 | |
--generic-resource-add | 添加通用资源 | |
--generic-resource-rm | 移除通用资源 | |
--group-add | 向容器添加附加的补充用户组 | |
--group-rm | 从容器中移除先前添加的附加用户组 | |
--health-cmd | 用于检查健康状态的命令 | |
--health-interval | 运行检查的时间间隔(毫秒 | |
--health-retries | 连续失败次数报告为不健康 | |
--health-start-period | 容器启动后在计算不稳定的重试次数之前的启动周期(毫秒 | |
--health-timeout | 允许单个检查运行的最长时间(毫秒 | |
--host-add | 添加自定义主机到 IP 映射(主机:IP) | |
--host-rm | 移除自定义主机到 IP 映射(主机:IP) | |
--hostname | 容器主机名 | |
--image | 服务镜像标签 | |
--init | 在每个服务容器中使用 init 进程转发信号和回收进程 | |
--isolation | 服务容器的隔离模式 | |
--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 | 添加网络 | |
--network-rm | 移除网络 | |
--no-healthcheck | 禁用容器指定的任何健康检查 | |
--no-resolve-image | 不查询注册表以解析镜像摘要和支持的平台 | |
--placement-pref-add | 添加偏好放置 | |
--placement-pref-rm | 移除偏好放置 | |
--publish-add | 添加或更新发布的端口 | |
--publish-rm | 移除发布的端口通过其目标端口 | |
--quiet, -q | 禁止输出进度信息 | |
--read-only | 将容器的根文件系统挂载为只读 | |
--replicas | 任务数量 | |
--replicas-max-per-node | API 1.40+ | 每个节点的最大任务数量(默认为 0,表示无限制) |
--reserve-cpu | 保留的 CPU | |
--reserve-memory | 保留的内存 | |
--restart-condition | 满足条件时重新启动服务(none、on-failure、any) | |
--restart-delay | 重新启动尝试之间的延迟时间(纳秒、微秒、毫秒、秒、分钟、小时) | |
--restart-max-attempts | 在放弃之前的最大重新启动次数 | |
--restart-window | 用于评估重新启动策略的时间窗口(纳秒、微秒、毫秒、秒、分钟、小时) | |
--rollback | 回滚到先前的规范 | |
--rollback-delay | 任务回滚之间的延迟时间(纳秒、微秒、毫秒、秒、分钟、小时) | |
--rollback-failure-action | 回滚失败时的操作(暂停、继续) | |
--rollback-max-failure-ratio | 回滚期间可容忍的失败率 | |
--rollback-monitor | 每个任务回滚后监视失败的持续时间(纳秒、微秒、毫秒、秒、分钟、小时) | |
--rollback-order | 回滚顺序(先启动、先停止) | |
--rollback-parallelism | 同时回滚的最大任务数(0 表示一次性回滚全部任务) | |
--secret-add | 在服务上添加或更新密钥 | |
--secret-rm | 移除密钥 | |
--stop-grace-period | 强制停止容器前等待的时间(纳秒、微秒、毫秒、秒、分钟、小时) | |
--stop-signal | 停止容器的信号 | |
--sysctl-add | API 1.40+ | 添加或更新 Sysctl 选项 |
--sysctl-rm | API 1.40+ | 移除 Sysctl 选项 |
--tty, -t | API 1.40+ | 分配伪终端 |
--ulimit-add | API 1.41+ | 添加或更新 ulimit 选项 |
--ulimit-rm | API 1.41+ | 移除 ulimit 选项 |
--update-delay | 更新之间的延迟时间(纳秒、微秒、毫秒、秒、分钟、小时) | |
--update-failure-action | 更新失败时的操作(暂停、继续、回滚) | |
--update-max-failure-ratio | 更新期间可容忍的失败率 | |
--update-monitor | 每个任务更新后监视失败的持续时间(纳秒、微秒、毫秒、秒、分钟、小时) | |
--update-order | 更新顺序(先启动、先停止) | |
--update-parallelism | 同时更新的最大任务数(0 表示一次性更新全部任务) | |
--user, -u | 用户名或 UID(格式: | |
--with-registry-auth | 将注册表身份验证详细信息发送给 Swarm 代理 | |
--workdir, -w | 容器内的工作目录 |
5、子命令
命令 | 描述 |
docker service create | 创建新的服务 |
docker service inspect | 显示一个或多个服务的详细信息 |
docker service logs | 获取一个服务或任务的日志 |
docker service ls | 列出服务 |
docker service ps | 列出一个或多个服务的任务 |
docker service rm | 删除一个或多个服务 |
docker service rollback | 恢复服务配置的更改 |
docker service scale | 缩放一个或多个复制的服务 |
docker service update | 更新一个服务的配置 |