diff --git a/index.js b/index.js
index 19bbf25471e1aab654cb4fcb7611abfa0a43d0e5..55c84f7f665a5c05a027ec3da4a8cf99418e6234 100644
--- a/index.js
+++ b/index.js
@@ -1,28 +1,42 @@
 const express = require("express");
 const bodyParser = require("body-parser");
 const cors = require("cors");
+const http = require("http");
+
 const { emptyCustomCodeDatabase } = require("./src/functions/helperFunctions");
-const { startRabbitmq } = require("./src/docker/dockerManager");
+const { startRabbitmq, dockerCleanUp } = require("./src/docker/dockerManager");
 
 const customCodeRouter = require("./src/routes/customCodeRouter");
 const deployRouter = require("./src/routes/deployRouter");
 
-const server = express();
+const app = express();
 const PORT = 3001;
 
-server.use(cors());
-server.use(bodyParser.json());
-server.use("/customCode", customCodeRouter);
-server.use("/deploy", deployRouter);
+app.use(cors());
+app.use(bodyParser.json());
+app.use("/customCode", customCodeRouter);
+app.use("/deploy", deployRouter);
 
-server.get("/", (req, res) => {
+app.get("/", (req, res) => {
   res.send("Hello World");
 });
 
 emptyCustomCodeDatabase();
 // clearDocker();
 
+const server = http.createServer(app);
+
 server.listen(PORT, () => {
   console.log(`Server listening on port ${PORT}`);
   startRabbitmq();
 });
+
+process.on("SIGINT", () => {
+  console.log("SIGINT empfangen. Server wird beendet...");
+  dockerCleanUp();
+
+  server.close(() => {
+    console.log("HTTP-Server geschlossen");
+    process.exit(0);
+  });
+});
diff --git a/src/docker/dockerManager.js b/src/docker/dockerManager.js
index d1f78b45e932c3d7aa833573f2ed60382b05d6f1..d6ce291ae83bffcd80772db08d710d29342cc9b4 100644
--- a/src/docker/dockerManager.js
+++ b/src/docker/dockerManager.js
@@ -215,6 +215,120 @@ function unpauseDockerContainer(containerId) {
   console.log(`::Docker container ${containerId} has been unpaused`);
 }
 
+function dockerCleanUp() {
+  console.log("::Start removing all Docker containers");
+
+  // Alle Docker-Container abrufen
+  let listContainersProcess = spawnSync("docker ps -aq", [], {
+    shell: true,
+    encoding: "utf-8",
+    stdio: ["pipe", "pipe", "pipe"],
+  });
+
+  if (listContainersProcess.stderr && listContainersProcess.stderr.length > 0) {
+    console.log("::Failed to retrieve Docker containers");
+    throw new Error(listContainersProcess.stderr);
+  }
+
+  const containerIds = listContainersProcess.stdout
+    .trim()
+    .split("\n")
+    .filter(Boolean);
+
+  if (containerIds.length > 0) {
+    console.log(`::Removing ${containerIds.length} Docker containers`);
+
+    // Alle Docker-Container stoppen
+    let stopContainersProcess = spawnSync("docker stop $(docker ps -aq)", [], {
+      shell: true,
+      encoding: "utf-8",
+      stdio: ["inherit", "inherit", "pipe"],
+    });
+
+    if (
+      stopContainersProcess.stderr &&
+      stopContainersProcess.stderr.length > 0
+    ) {
+      console.log("::Failed to stop Docker containers");
+      throw new Error(stopContainersProcess.stderr);
+    }
+
+    // Alle Docker-Container entfernen
+    let removeContainersProcess = spawnSync("docker rm $(docker ps -aq)", [], {
+      shell: true,
+      encoding: "utf-8",
+      stdio: ["inherit", "inherit", "pipe"],
+    });
+
+    if (
+      removeContainersProcess.stderr &&
+      removeContainersProcess.stderr.length > 0
+    ) {
+      console.log("::Failed to remove Docker containers");
+      throw new Error(removeContainersProcess.stderr);
+    }
+
+    console.log("::All Docker containers have been removed");
+  } else {
+    console.log("::No Docker containers found");
+  }
+
+  console.log("::Start removing all Docker images");
+
+  // Alle Docker-Images abrufen
+  let listImagesProcess = spawnSync("docker images -aq", [], {
+    shell: true,
+    encoding: "utf-8",
+    stdio: ["pipe", "pipe", "pipe"],
+  });
+
+  if (listImagesProcess.stderr && listImagesProcess.stderr.length > 0) {
+    console.log("::Failed to retrieve Docker images");
+    throw new Error(listImagesProcess.stderr);
+  }
+
+  const imageIds = listImagesProcess.stdout.trim().split("\n").filter(Boolean);
+
+  if (imageIds.length > 0) {
+    console.log(`::Removing ${imageIds.length} Docker images`);
+
+    // Alle Docker-Images entfernen
+    let removeImagesProcess = spawnSync(
+      "docker rmi -f $(docker images -aq)",
+      [],
+      {
+        shell: true,
+        encoding: "utf-8",
+        stdio: ["inherit", "inherit", "pipe"],
+      }
+    );
+
+    if (removeImagesProcess.stderr && removeImagesProcess.stderr.length > 0) {
+      console.log("::Failed to remove Docker images");
+      throw new Error(removeImagesProcess.stderr);
+    }
+
+    console.log("::All Docker images have been removed");
+  } else {
+    console.log("::No Docker images found");
+  }
+  console.log("::Start pruning unused Docker networks");
+
+  // Unbenutzte Docker-Netzwerke bereinigen
+  let pruneNetworksProcess = spawnSync("docker network prune -f", [], {
+    shell: true,
+    encoding: "utf-8",
+    stdio: ["inherit", "inherit", "pipe"],
+  });
+
+  if (pruneNetworksProcess.stderr && pruneNetworksProcess.stderr.length > 0) {
+    console.log("::Failed to prune Docker networks");
+    throw new Error(pruneNetworksProcess.stderr);
+  }
+
+  console.log("::All unused Docker networks have been pruned");
+}
+
 function buildAndRunDocker(
   path,
   dockerImageName,
@@ -240,4 +354,5 @@ module.exports = {
   removeDockerImage,
   pauseDockerContainer,
   unpauseDockerContainer,
+  dockerCleanUp,
 };