From b0dad0b90e6463c8e4bd6dd8a82984a6f5ee622a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 23 Jun 2026 16:46:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(update):=20=E4=BF=AE=E5=A4=8D=20bugcollect-?= =?UTF-8?q?service=20=E5=B7=B2=E5=81=9C=E6=AD=A2=E6=97=B6=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E4=BB=8D=E8=B7=B3=E8=BF=87=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上次修复用 docker ps(仅运行中)检测 bugcollect,导致容器已停止时 profile 未激活、重启循环也跳过,升级后 502 依旧。 修复: - profile 检测改用 docker ps -a(含已停止容器) - bugcollect-service / symbolicator 从主循环拆出,独立用 docker ps -a 检测历史容器,存在即以 COMPOSE_PROFILES=bugcollect 重启,不依赖 当前运行状态 Co-Authored-By: Claude Sonnet 4.6 --- scripts/update.sh | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/scripts/update.sh b/scripts/update.sh index 27dc174..9c916e2 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -139,12 +139,12 @@ ok "NGINX_BIND=${_NGINX_BIND}" [ -n "$_CONSOLE_DOMAIN" ] || fail "config/xuqm.env 中 CONSOLE_DOMAIN 未设置,请手动补充后重试" -# 检测已运行的可选 profile 容器,升级时保持 profile 激活状态,避免 -# docker compose --remove-orphans 把 profile 容器当孤儿停掉 +# 检测可选 profile 容器(含已停止),升级时保持 profile 激活状态, +# 避免 docker compose --remove-orphans 把 profile 容器当孤儿停掉 _ACTIVE_PROFILES="" -if docker ps --format '{{.Names}}' 2>/dev/null | grep -qi 'bugcollect'; then +if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -qi 'bugcollect'; then _ACTIVE_PROFILES="bugcollect" - ok "检测到 bugcollect-service 运行中 → 激活 bugcollect profile" + ok "检测到 bugcollect-service(含已停止)→ 激活 bugcollect profile" fi export COMPOSE_PROFILES="${_ACTIVE_PROFILES}" @@ -497,7 +497,7 @@ _COMPOSE="docker compose --env-file ${ROOT_DIR}/.env \ # 使用 up -d 而非 restart:restart 只重启容器进程,不会切换到新拉取的镜像; # up -d 会检测镜像变更并重建容器,是应用新版本的正确方式。 -for _svc in tenant-service im-service file-service update-service license-service push-service tenant-web nginx bugcollect-service symbolicator; do +for _svc in tenant-service im-service file-service update-service license-service push-service tenant-web nginx; do # 仅重启已激活的服务(跳过未运行的可选服务) if $_COMPOSE ps --services --filter status=running 2>/dev/null | grep -q "^${_svc}$"; then info "应用新镜像并重启 ${_svc} ..." @@ -506,6 +506,16 @@ for _svc in tenant-service im-service file-service update-service license-servic fi done +# bugcollect-service / symbolicator 是 profile 服务,需单独处理: +# 用 docker ps -a 检测历史容器(含已停止),存在即重启,确保升级不漏掉 +for _svc in bugcollect-service symbolicator; do + if docker ps -a --format '{{.Names}}' 2>/dev/null | grep -qi "${_svc}"; then + info "应用新镜像并重启 ${_svc} ..." + COMPOSE_PROFILES=bugcollect $_COMPOSE up -d --no-deps "$_svc" + ok "${_svc} 已更新" + fi +done + # 确保 nginx 在运行(一键更新时可能因 --remove-orphans 时序问题导致 nginx 被停掉) if ! $_COMPOSE ps --services --filter status=running 2>/dev/null | grep -q "^nginx$"; then info "nginx 未运行,正在启动 ..."