fix(update): 修复 bugcollect-service 已停止时升级仍跳过的问题

上次修复用 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 <noreply@anthropic.com>
这个提交包含在:
徐勤民 2026-06-23 16:46:53 +08:00
父节点 a1625ade98
当前提交 b0dad0b90e

查看文件

@ -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 而非 restartrestart 只重启容器进程,不会切换到新拉取的镜像;
# 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 未运行,正在启动 ..."