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

使用Docker Compose实现可回滚的安全升级方案咨询

基于:latest标签的更新回滚工作流

方案一:手动标记「已知可用」镜像(你的思路落地)

你的想法完全可行,具体操作步骤可以这样落地:

  1. 更新前标记当前可用镜像
    在执行更新操作前,先给正在运行的容器对应的镜像打上last-known-working标签,留存可回滚的版本:

    # 直接基于容器打标签,简洁高效
    docker tag calibre-web lscr.io/linuxserver/calibre-web:last-known-working
    
  2. 执行更新操作
    拉取最新镜像并强制重建容器:

    docker-compose pull && docker-compose up -d --force-recreate
    
  3. 测试后确认或回滚

    • 若测试正常:无需额外操作,下次更新前重复步骤1即可覆盖旧的last-known-working标签;
    • 若更新失败:临时修改docker-compose.yml的镜像标签,切换到标记好的可用版本重启:
      services:
        calibre-web:
          image: lscr.io/linuxserver/calibre-web:last-known-working
          container_name: calibre-web
          ...
      
      执行重启命令:
      docker-compose up -d --force-recreate
      
      回滚完成后,记得把docker-compose.yml改回:latest,方便后续更新。

方案二:利用镜像历史自动回滚(无需手动打标签)

如果不想维护自定义标签,可以直接借助Docker的镜像历史记录回滚:

  1. 更新前记录当前镜像ID
    执行更新前先保存当前容器使用的镜像ID:

    docker inspect -f '{{.Image}}' calibre-web > current_image.txt
    
  2. 执行更新操作
    同样运行更新命令:

    docker-compose pull && docker-compose up -d --force-recreate
    
  3. 回滚时指定旧镜像ID
    若需要回滚,修改docker-compose.yml的image字段为current_image.txt里记录的ID:

    services:
      calibre-web:
        image: <记录的镜像ID>
        container_name: calibre-web
        ...
    

    重启容器即可完成回滚,这种方式不用维护标签,但要确保镜像ID记录不丢失。

方案三:脚本化自动化工作流(一键完成更新+回滚)

把上述步骤写成Shell脚本,能大幅简化操作流程,比如创建update-service.sh:

#!/bin/bash
SERVICE="calibre-web"
IMAGE="lscr.io/linuxserver/calibre-web"

# 标记当前可用镜像
docker tag $SERVICE $IMAGE:last-known-working

# 执行更新
docker-compose pull $SERVICE && docker-compose up -d --force-recreate $SERVICE

echo "更新完成,请测试服务。"
read -p "确认更新保留?(输入y确认,其他键回滚): " CHOICE
if [ "$CHOICE" != "y" ]; then
  # 临时切换标签回滚
  sed -i "s|image: $IMAGE:latest|image: $IMAGE:last-known-working|" docker-compose.yml
  docker-compose up -d --force-recreate $SERVICE
  # 改回latest标签,方便下次更新
  sed -i "s|image: $IMAGE:last-known-working|image: $IMAGE:latest|" docker-compose.yml
  echo "已回滚至上一个可用版本。"
fi

给脚本添加执行权限:chmod +x update-service.sh,之后直接运行脚本就能完成更新、测试、回滚的全流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:52:51