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 }; }