check-docker.js
Rama main · réplica de lectura del repositorio original.
// check-docker.js — Pre-flight Docker check for Pinokio install.
// Verifies Docker CLI, daemon, and Compose are available.
// Handles Windows PATH issues and gives actionable error messages.
const { execSync } = require("child_process");
const os = require("os");
const fs = require("fs");
function exec(cmd, timeoutMs) {
try {
return execSync(cmd, { encoding: "utf8", timeout: timeoutMs || 15000 }).trim();
} catch {
return null;
}
}
function execDetail(cmd, timeoutMs) {
try {
return {
ok: true,
out: execSync(cmd, { encoding: "utf8", timeout: timeoutMs || 15000 }).trim(),
};
} catch (e) {
return {
ok: false,
err: ((e.stderr || "") + " " + (e.message || "")).trim(),
};
}
}
// --- Windows: Docker Desktop may not be on PATH in Pinokio's conda shell ---
if (os.platform() === "win32" && !exec("docker --version")) {
const candidates = [
(process.env.ProgramFiles || "C:\\Program Files") +
"\\Docker\\Docker\\resources\\bin",
(process.env.LOCALAPPDATA || "") +
"\\Programs\\Docker\\Docker\\resources\\bin",
];
for (const dir of candidates) {
try {
fs.accessSync(dir);
process.env.PATH = dir + ";" + (process.env.PATH || "");
console.log(" Found Docker at: " + dir);
break;
} catch {
// not found here, try next
}
}
}
// --- Check 1: Docker CLI installed ---
const ver = exec("docker --version");
if (!ver) {
console.error("\n ERROR: Docker is not installed.\n");
console.error(" OpenVoiceUI runs in Docker containers.");
console.error(
" Install Docker Desktop: https://docker.com/products/docker-desktop/\n"
);
process.exit(1);
}
console.log(" " + ver);
// --- Check 2: Docker daemon running ---
const info = execDetail("docker info", 30000);
if (!info.ok) {
if (
info.err.includes("permission denied") ||
info.err.includes("Permission denied")
) {
console.error("\n ERROR: Permission denied accessing Docker.\n");
if (os.platform() === "linux") {
console.error(" Add your user to the docker group:");
console.error(" sudo usermod -aG docker $USER");
console.error(" Then log out and log back in.\n");
} else {
console.error(" Try running Pinokio as administrator.\n");
}
} else {
console.error("\n ERROR: Docker is installed but not running.\n");
if (os.platform() === "win32" || os.platform() === "darwin") {
console.error(
" Open Docker Desktop and wait for it to finish starting."
);
} else {
console.error(" Start Docker: sudo systemctl start docker");
}
console.error(" Then click Install again.\n");
}
process.exit(1);
}
// --- Check 3: Docker Compose v2 ---
const compose = exec("docker compose version");
if (!compose) {
console.error("\n ERROR: Docker Compose v2 is not available.\n");
console.error(" It ships with Docker Desktop — update your Docker Desktop");
console.error(
" or install the plugin: https://docs.docker.com/compose/install/\n"
);
process.exit(1);
}
console.log(" " + compose);
console.log("\n Docker is ready!\n");