Team Ai
Apppublic

Ratankumar10/code-execution-engine

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes
docker.util.js59 linesDownload Raw Back to utils
1// ─── Docker Utility ──────────────────────────2// Verifies Docker availability and builds sandbox image3 4const { exec } = require("child_process");5const { promisify } = require("util");6const path = require("path");7const config = require("../config");8const logger = require("./logger.util");9 10const execAsync = promisify(exec);11 12/**13 * Verify Docker daemon is installed and running14 */15async function verifyDocker() {16  try {17    const { stdout } = await execAsync(18      'docker info --format "{{.ServerVersion}}"',19    );20    logger.info(`🐳 Docker available (v${stdout.trim()})`);21  } catch (err) {22    logger.error("❌ Docker is not available!");23    logger.error("   Make sure Docker is installed and the daemon is running.");24    logger.error("   Install: https://docs.docker.com/engine/install/");25    throw new Error("Docker is required but not available");26  }27}28 29/**30 * Build the sandbox Docker image if it doesn't already exist31 */32async function buildSandboxImage() {33  try {34    // Check if image already exists35    await execAsync(36      `docker image inspect ${config.SANDBOX_IMAGE} > /dev/null 2>&1`,37    );38    logger.info(`🐳 Sandbox image '${config.SANDBOX_IMAGE}' already exists`);39  } catch {40    // Image doesn't exist — build it41    logger.info(`🔨 Building sandbox image '${config.SANDBOX_IMAGE}'...`);42    logger.info("   This may take 1-2 minutes on first run...");43 44    const sandboxDir = path.join(__dirname, "..", "..", "sandbox");45 46    try {47      await execAsync(`docker build -t ${config.SANDBOX_IMAGE} ${sandboxDir}`, {48        timeout: 300000, // 5 minute timeout for build49      });50      logger.info("✅ Sandbox image built successfully");51    } catch (buildErr) {52      logger.error("❌ Failed to build sandbox image:", buildErr.message);53      throw new Error("Failed to build sandbox Docker image");54    }55  }56}57 58module.exports = { verifyDocker, buildSandboxImage };59