You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm生产环境单箱测试:如何临时推送新版本镜像至单个副本并回滚?

Docker Swarm单箱测试:灰度发布与回滚实操指南

当然可以!这种金丝雀发布的方式完全适配你在Docker Swarm里做单箱测试的需求——先让单个副本跑新版本,测试没问题再全量更新,出问题就快速回滚。下面给你唠唠具体怎么操作:

一、提前准备好这些

  • 确认Swarm集群运行正常,目标生产服务(比如我就叫它my-prod-service)已经部署,当前用的是旧版本镜像old-image:v1
  • 新版本镜像new-image:v2已经构建完成,并且推送到了你的镜像仓库(要保证集群里的所有节点都能拉取到这个镜像)

二、让单个副本跑新版本(两种实用方法)

方法1:用Swarm滚动更新参数精准控制

这是最省心的方式,直接利用Swarm的更新策略,让它只更新1个副本,然后暂停更新流程,给你留足测试时间:

  1. 先看看当前服务的配置心里有数:
    docker service inspect my-prod-service
  2. 执行更新命令,指定新版本镜像,同时设置并行更新数为1,更新延迟拉得足够长(比如3600秒,也就是1小时,够你测了吧?):
    docker service update --image new-image:v2 --update-parallelism 1 --update-delay 3600s my-prod-service
    执行完后,Swarm只会把1个副本更到新版本,然后就等着,这段时间你就放心测这个单独的新版本实例就行。

方法2:手动新增单个新版本副本(更灵活)

如果想更自主控制,也可以手动加个副本然后单独更到新版本:

  1. 先给现有旧版本的所有实例打个标签,方便后续区分:
    docker service update --label-add "version=v1" my-prod-service
  2. 给服务加1个副本:
    docker service scale my-prod-service=$(docker service inspect --format '{{.Spec.Mode.Replicated.Replicas}}' my-prod-service)+1
  3. 只更新没有version=v1标签的那个新副本到新版本:
    docker service update --image new-image:v2 --filter "label!=version=v1" my-prod-service
    这样就只有刚加的那个副本跑新版本,其他还是原来的旧版本,完全隔离。

三、怎么测试这个新版本实例?

测试期间,你可以这么定位和验证:

  • 看服务的任务列表,能清楚看到每个副本用的镜像版本:docker service ps my-prod-service
  • 直接进容器调试或者看日志:docker exec -it <任务ID> bash(任务ID从上面的命令结果里拿)
  • 如果服务有暴露端口,要是用了Swarm路由网格,可以给新版本实例加个节点约束,让它跑在特定节点上,然后直接访问这个节点的对应端口,就能单独测这个实例了。

四、测试完怎么回滚?

不管用哪种方法,回滚都超级简单:

  • 直接用Swarm自带的回滚命令,一键回到更新前的状态:docker service rollback my-prod-service
    执行完后,所有副本都会切回旧版本old-image:v1,省心到爆。
  • 要是用的手动加副本的方法,也可以先删掉那个新版本副本,再把服务缩容回原来的数量:
    docker service scale my-prod-service=$(docker service inspect --format '{{.Spec.Mode.Replicated.Replicas}}' my-prod-service)-1

几个实用小贴士

  • 测试前建议给服务加个--update-failure-action pause参数,要是新版本实例启动失败,Swarm会立刻暂停更新,不会影响其他正常的生产副本。
  • 确保新版本镜像的配置和生产环境完全一致,不然测试结果就不准啦。
  • 测试期间可以实时看所有实例的日志:docker service logs -f my-prod-service,随时监控新版本的运行状态。

内容的提问来源于stack exchange,提问作者sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:30:55