From 8657d95402d195b3cb44a5b47e0d0bf3a2795472 Mon Sep 17 00:00:00 2001 From: lxh2875931338 Date: Wed, 29 Jul 2026 23:48:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=8B=E5=8A=A1=E5=90=8E=E9=92=A9=E5=AD=90?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E5=86=97=E4=BD=99=E9=95=9C=E5=83=8F?= =?UTF-8?q?=E7=9A=84=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy.sh | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/deploy.sh b/deploy.sh index cbf1f6b..7144506 100644 --- a/deploy.sh +++ b/deploy.sh @@ -633,6 +633,7 @@ do_deploy() { print_warn "数据库为空或不可用,请通过 WebUI 注册管理员账户" fi + # ----- 验证版本写入 ----- # ----- 验证版本写入 ----- print_step "验证版本..." sleep 1 @@ -651,6 +652,37 @@ do_deploy() { echo " 如需回退,请恢复: cp -r $BACKUP_DIR/frpc-console/* $DEPLOY_DIR/" fi + # ----- 事务后钩子:清理旧镜像 ----- + print_step "清理旧镜像..." + + # 保留最近 3 个镜像(包括刚构建的) + KEEP_COUNT=3 + + CURRENT_IMAGE_ID=$(docker images -q "${IMAGE_NAME}:${IMAGE_TAG}" 2>/dev/null) + if [ -n "$CURRENT_IMAGE_ID" ]; then + ALL_IMAGES=$(docker images "${IMAGE_NAME}:*" --format "{{.ID}} {{.CreatedAt}}" 2>/dev/null | sort -k2 -r | awk '{print $1}') + COUNTER=0 + TO_DELETE="" + for IMG_ID in $ALL_IMAGES; do + if [ "$IMG_ID" = "$CURRENT_IMAGE_ID" ]; then + continue + fi + COUNTER=$((COUNTER + 1)) + if [ $COUNTER -le $KEEP_COUNT ]; then + continue + fi + TO_DELETE="$TO_DELETE $IMG_ID" + done + if [ -n "$TO_DELETE" ]; then + docker rmi -f $TO_DELETE 2>/dev/null || true + print_info "已清理旧镜像" + else + print_info "无需清理,镜像数量未超过保留策略" + fi + else + print_warn "无法获取当前镜像 ID,跳过清理" + fi + # ----- 清理临时文件 ----- print_step "清理临时文件..." rm -rf "$WORK_DIR"