From 343a84d6bcaf4748680390274ddaf7e4f55277f2 Mon Sep 17 00:00:00 2001 From: v_prudnikoff Date: Thu, 12 Feb 2026 14:53:30 +0000 Subject: [PATCH] fix: prevent orphaned docker stacks when compose directory is missing `docker stack rm` was chained after `cd` with `&&`, so if the compose directory didn't exist the stack removal command never executed. This left orphaned Docker services with occupied ports after deletion via the API. Also removed a duplicate `execAsync` call that always ran outside the `if/else` block regardless of `compose.serverId`. Fixes #3691 --- packages/server/src/services/compose.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/server/src/services/compose.ts b/packages/server/src/services/compose.ts index 89a12a156..7021ba29a 100644 --- a/packages/server/src/services/compose.ts +++ b/packages/server/src/services/compose.ts @@ -395,16 +395,14 @@ export const removeCompose = async ( if (compose.composeType === "stack") { const command = ` docker network disconnect ${compose.appName} dokploy-traefik; - cd ${projectPath} && docker stack rm ${compose.appName} && rm -rf ${projectPath}`; + docker stack rm ${compose.appName}; + rm -rf ${projectPath}`; if (compose.serverId) { await execAsyncRemote(compose.serverId, command); } else { await execAsync(command); } - await execAsync(command, { - cwd: projectPath, - }); } else { const command = ` docker network disconnect ${compose.appName} dokploy-traefik;