From aece1fd08dcafca36f250dc4d059f6a30111a49a Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Thu, 21 May 2026 15:46:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(system-update):=20=E7=94=A8=20compose=20lab?= =?UTF-8?q?el=20=E6=9F=A5=E8=AF=A2=E5=AE=B9=E5=99=A8=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20isRunning=20=E5=92=8C=E8=87=AA=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=8A=A9=E6=89=8B=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - isRunning() 改用 docker ps --filter label=com.docker.compose.service 兼容 Compose v1 (xuqm_svc_1) 和 v2 (xuqm-svc-1) 命名格式 - 自更新助手镜像改用 getCurrentImage() 从运行中容器的 label 获取, 不再依赖容器环境变量 REGISTRY/IMAGE_TAG(容器内未注入这两个变量) Co-Authored-By: Claude Sonnet 4.6 --- .../tenant/service/SystemUpdateService.java | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/tenant-service/src/main/java/com/xuqm/tenant/service/SystemUpdateService.java b/tenant-service/src/main/java/com/xuqm/tenant/service/SystemUpdateService.java index d59147e..46f7cfb 100644 --- a/tenant-service/src/main/java/com/xuqm/tenant/service/SystemUpdateService.java +++ b/tenant-service/src/main/java/com/xuqm/tenant/service/SystemUpdateService.java @@ -51,9 +51,14 @@ public class SystemUpdateService { // 解决方案:先用 docker run -d 启动一个独立助手容器,它不依附于 tenant-service, // 能在 tenant-service 停止后继续完成重建。 emit.accept(">>> 启动自更新助手容器..."); - String registry = System.getenv().getOrDefault("REGISTRY", ""); - String imageTag = System.getenv().getOrDefault("IMAGE_TAG", "latest"); - String selfImage = registry.isEmpty() ? "alpine" : (registry + "/tenant-service:" + imageTag); + // Resolve the image by inspecting the running container via compose labels, + // so we don't depend on REGISTRY/IMAGE_TAG being present in the container env. + String selfImage = getCurrentImage(); + if (selfImage == null) { + emit.accept(">>> [错误] 无法获取当前 tenant-service 镜像名,请检查容器标签或手动执行更新。"); + emit.accept("DONE"); + return; + } boolean helperStarted = spawnSelfUpdater(composeFile, selfImage); if (helperStarted) { @@ -100,19 +105,39 @@ public class SystemUpdateService { } } + // Use compose labels instead of container name — works with both Compose v1 (xuqm_svc_1) + // and Compose v2 (xuqm-svc-1) naming conventions. private boolean isRunning(String service) { - String containerName = "xuqm-" + service; try { - Process p = new ProcessBuilder("docker", "inspect", "--type=container", containerName) - .redirectErrorStream(true) - .start(); - p.getInputStream().transferTo(java.io.OutputStream.nullOutputStream()); - return p.waitFor() == 0; + Process p = new ProcessBuilder( + "docker", "ps", "-q", + "--filter", "label=com.docker.compose.project=xuqm", + "--filter", "label=com.docker.compose.service=" + service + ).redirectErrorStream(true).start(); + String out = new String(p.getInputStream().readAllBytes()).trim(); + p.waitFor(); + return !out.isEmpty(); } catch (Exception e) { return false; } } + private String getCurrentImage() { + try { + Process p = new ProcessBuilder( + "docker", "ps", + "--filter", "label=com.docker.compose.project=xuqm", + "--filter", "label=com.docker.compose.service=tenant-service", + "--format", "{{.Image}}" + ).redirectErrorStream(true).start(); + String out = new String(p.getInputStream().readAllBytes()).trim(); + p.waitFor(); + return out.isEmpty() ? null : out; + } catch (Exception e) { + return null; + } + } + private void exec(Consumer emit, String... cmd) { try { Process p = new ProcessBuilder(cmd)