From 501860a23b1f59a67095a057882ff40210a1b481 Mon Sep 17 00:00:00 2001 From: Jake Turner Date: Wed, 13 May 2026 21:24:33 +0000 Subject: [PATCH] fix(DockerService): improve volume logic and documentation in forceReinstall --- admin/app/services/docker_service.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/admin/app/services/docker_service.ts b/admin/app/services/docker_service.ts index d054068..aad3927 100644 --- a/admin/app/services/docker_service.ts +++ b/admin/app/services/docker_service.ts @@ -291,8 +291,12 @@ export class DockerService { /** * Force reinstall a service by stopping, removing, and recreating its container. - * This method will also clear any associated volumes/data. - * Handles edge cases gracefully (e.g., container not running, container not found). + * + * Volume handling: removes Docker-managed named volumes whose name equals + * `serviceName`, starts with `${serviceName}_`, or carries a `service=${serviceName}` + * label. Host bind mounts are NOT touched — any data living on a bind-mounted + * host path (ZIM stores, model caches, MySQL data dir, etc.) survives the reinstall. + * Anonymous volumes (random hash names) are also not matched. */ async forceReinstall(serviceName: string): Promise<{ success: boolean; message: string }> { try { @@ -365,7 +369,10 @@ export class DockerService { const volumes = await this.docker.listVolumes() const serviceVolumes = volumes.Volumes?.filter( - (v) => v.Name.includes(serviceName) || v.Labels?.service === serviceName + (v) => + v.Name === serviceName || + v.Name.startsWith(`${serviceName}_`) || + v.Labels?.service === serviceName ) || [] for (const vol of serviceVolumes) {