[BUG] fix: volume cleaning should not be performed

This commit is contained in:
фырат ёздэн
2025-12-14 08:06:55 +03:00
committed by GitHub
parent 0b45b795e8
commit 19a7a80d43

View File

@@ -174,9 +174,9 @@ echo "Execution completed."`;
const cleanupCommands = {
containers: "docker container prune --force",
images: "docker image prune --all --force",
volumes: "docker volume prune --all --force",
builders: "docker builder prune --all --force",
system: "docker system prune --all --force",
volumes: "docker volume prune --all --force",
};
export const cleanupContainers = async (serverId?: string) => {
@@ -257,24 +257,40 @@ export const cleanupSystem = async (serverId?: string) => {
}
};
/**
* Volume cleanup should always be performed manually by the user. The reason is that during automatic cleanup, a volume may be deleted due to a stopped container, which is a dangerous situation.
*
* https://github.com/Dokploy/dokploy/pull/3266
*/
const excludedCleanupAllCommands: (keyof typeof cleanupCommands)[] = ['volumes'];
export const cleanupAll = async (serverId?: string) => {
await cleanupContainers(serverId);
await cleanupImages(serverId);
await cleanupBuilders(serverId);
await cleanupSystem(serverId);
for (const [key, command] of Object.entries(cleanupCommands)) {
if (excludedCleanupAllCommands.includes(key)) continue;
try {
if (serverId) {
await execAsyncRemote(serverId, dockerSafeExec(command));
} else {
await execAsync(dockerSafeExec(command));
}
} catch {}
}
};
export const cleanupAllBackground = async (serverId?: string) => {
Promise.allSettled(
Object.values(cleanupCommands).map(async (command) => {
try {
if (serverId) {
await execAsyncRemote(serverId, dockerSafeExec(command));
} else {
await execAsync(dockerSafeExec(command));
}
} catch (error) {}
}),
Object.entries(cleanupCommands)
.filter(([key]) => !excludedCleanupAllCommands.includes(key))
.map(async ([, command]) => {
try {
if (serverId) {
await execAsyncRemote(serverId, dockerSafeExec(command));
} else {
await execAsync(dockerSafeExec(command));
}
} catch {}
})
)
.then((results) => {
const failed = results.filter((r) => r.status === "rejected");