64 lines
1.6 KiB
JavaScript
Executable File
64 lines
1.6 KiB
JavaScript
Executable File
import fs from 'node:fs';
|
|
import http from 'node:http';
|
|
|
|
function requestDocker(socketPath, requestPath, method) {
|
|
return new Promise((resolve, reject) => {
|
|
const request = http.request(
|
|
{
|
|
socketPath,
|
|
path: requestPath,
|
|
method,
|
|
},
|
|
(response) => {
|
|
let body = '';
|
|
response.setEncoding('utf8');
|
|
response.on('data', (chunk) => {
|
|
body += chunk;
|
|
});
|
|
response.on('end', () => {
|
|
resolve({
|
|
statusCode: response.statusCode ?? 500,
|
|
body,
|
|
});
|
|
});
|
|
},
|
|
);
|
|
|
|
request.on('error', reject);
|
|
request.end();
|
|
});
|
|
}
|
|
|
|
async function main() {
|
|
const containerName = process.argv[2]?.trim();
|
|
const socketPath = process.env.SERVER_COMMAND_DOCKER_SOCKET?.trim() || '/var/run/docker.sock';
|
|
|
|
if (!containerName) {
|
|
console.error('container name is required');
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!fs.existsSync(socketPath)) {
|
|
console.error(`Docker socket not found: ${socketPath}`);
|
|
process.exit(127);
|
|
}
|
|
|
|
const restartPath = `/containers/${encodeURIComponent(containerName)}/restart?t=30`;
|
|
const response = await requestDocker(socketPath, restartPath, 'POST');
|
|
|
|
if (response.statusCode >= 200 && response.statusCode < 300) {
|
|
process.stdout.write(`${containerName} restarted via Docker socket`);
|
|
return;
|
|
}
|
|
|
|
if (response.statusCode === 404) {
|
|
console.error(`Container not found: ${containerName}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.error(`Docker socket restart failed (${response.statusCode}): ${response.body.trim()}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
await main();
|