From 0b59245f764f1397a4ef48f6256e932763e5d1cd Mon Sep 17 00:00:00 2001 From: Manus Deploy Date: Fri, 24 Jul 2026 15:36:14 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20d=C3=A9marrer=20les=20applications=20abs?= =?UTF-8?q?entes=20via=20compose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/src/docker.js | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/backend/src/docker.js b/src/backend/src/docker.js index 3245e27..7122a79 100644 --- a/src/backend/src/docker.js +++ b/src/backend/src/docker.js @@ -139,11 +139,38 @@ function gitPull(appConfig) { /** * Démarrer un conteneur Docker */ -async function startContainer(containerName) { +async function startContainer(containerName, appId) { try { + // Tenter d'abord un docker start (conteneur existant mais arrêté) const container = docker.getContainer(containerName); - await container.start(); - return { success: true, message: `Conteneur ${containerName} démarré` }; + const info = await container.inspect().catch(() => null); + if (info) { + // Le conteneur existe, on le démarre + if (!info.State.Running) { + await container.start(); + } + return { success: true, message: `Conteneur ${containerName} démarré` }; + } + // Le conteneur n'existe pas : docker compose up dans le répertoire de l'app + const id = appId || containerName; + const appsBasePath = config.appsBasePath || process.env.APPS_BASE_PATH || '/opt/manus-deploy/apps'; + const appDir = path.join(appsBasePath, id); + const fs = require('fs'); + const composeFile = fs.existsSync(path.join(appDir, 'docker-compose.yml')) + ? path.join(appDir, 'docker-compose.yml') + : fs.existsSync(path.join(appDir, 'docker-compose.prod.yml')) + ? path.join(appDir, 'docker-compose.prod.yml') + : null; + if (!composeFile) { + return { success: false, message: `Aucun docker-compose.yml trouvé dans ${appDir}` }; + } + await new Promise((resolve, reject) => { + exec(`docker compose -f ${composeFile} up -d`, { cwd: appDir }, (err, stdout, stderr) => { + if (err) reject(new Error(stderr || err.message)); + else resolve(stdout); + }); + }); + return { success: true, message: `Conteneur ${containerName} créé et démarré via docker compose` }; } catch (err) { return { success: false, message: err.message }; }