import Docker from 'dockerode';
const docker = new Docker({ socketPath: '/var/run/docker.sock' });
/**
* 发送Nginx重载命令到容器
*/
export async function reloadNginxInContainer(name: string) {
try {
// 获取容器
const containers = await docker.listContainers({
filters: { name: [`/${name}`] }
});
if (containers.length === 0) {
throw new Error(`未找到名称为 ${name} 的容器`);
}
const container = docker.getContainer(containers[0].Id);
// 执行nginx重载命令
const exec = await container.exec({
Cmd: ['nginx', '-s', 'reload'],
AttachStdout: true,
AttachStderr: true
});
const stream = await exec.start({});
// 处理输出
return new Promise((resolve, reject) => {
let output = '';
stream.on('data', (data) => { output += data.toString(); });
stream.on('end', () => {
console.log('Nginx重载输出:', output);
resolve(true);
});
stream.on('error', reject);
});
} catch (error) {
console.error('Nginx重载失败:', error);
return false;
}
}