librelad 66e747e1ba fix(uninstall): always run name-based container cleanup + drop CLI hint
Two small uninstall-output tweaks.

1. dockerComposeDownRemove now ALWAYS calls dockerRemoveApp (the
   `docker ps -aqf name=…` → stop + rm sweep) as a fallback, even when
   the compose-down step is skipped because the app dir is missing.
   Before, a partial prior uninstall (compose file gone but containers
   still running) produced "App directory not found. Skipping container
   shutdown." and then proceeded as if the uninstall were complete —
   leaving the actual containers running. The name-based sweep also
   runs after a successful compose-down to catch anything compose
   wouldn't pick up (renamed services, orphans from earlier failures).

   While here: the OS_TYPE gate (only Ubuntu/Debian) is gone too —
   `docker compose down` works on any OS with docker, and gating it
   meant Arch/etc. users got NO compose teardown at all.

2. The step-2 header "Keeping Docker images (pass --delete-images to
   remove)" trimmed to just "Keeping Docker images". The `isNotice`
   line below already explains the reuse-on-reinstall behaviour; the
   CLI-flag hint reads as noise in the WebUI task log where users
   can't act on it anyway. CLI users can still pass --delete-images
   (cli_app_commands.sh wires it as before) or tick the WebUI's
   "Also delete docker image" checkbox.

Signed-off-by: librelad <librelad@digitalangels.vip>
2026-05-27 15:41:19 +01:00

37 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
# Take an app's containers down + remove them. Two paths run in order:
#
# 1. `docker compose down -v --remove-orphans` from the app dir. Best
# path — clean shutdown, named volumes pruned, orphans swept. Only
# runs when the compose file is still on disk.
#
# 2. Name-based fallback (`dockerRemoveApp`): `docker ps -aqf name=$app`
# → stop + rm. Always runs, even when compose down succeeded, to
# catch containers compose wouldn't pick up — renamed/relabelled
# ones, leftovers from a previously-failed uninstall, and the case
# the user flagged: app dir already gone, compose step skipped,
# containers were still running.
dockerComposeDownRemove()
{
local app_name="$1"
if [[ -z "$app_name" ]]; then
isError "No app_name provided, unable to continue..."
return 1
fi
if [[ -d "$containers_dir$app_name" ]]; then
isNotice "Shutting down & removing all $app_name container data"
if [[ "$CFG_DOCKER_INSTALL_TYPE" == "rootless" ]]; then
dockerCommandRunInstallUser "cd $containers_dir$app_name && docker compose down -v --remove-orphans" >/dev/null 2>&1
else
(cd "$containers_dir$app_name" && docker compose down -v --remove-orphans) >/dev/null 2>&1
fi
else
isNotice "App directory '$app_name' not found — falling back to name-based container cleanup."
fi
dockerRemoveApp "$app_name"
}