Nodejs 执行 Docker run 的 stdout 问题
Nodejs 执行 Docker run 的 stdout 问题
请教各位大神 nodejs 调用 docker run 命令的问题
由于执行时间比较长,我想把执行中的输出抓出来
代码是这样的
var p = spawn('docker', [
'run',
'-i',
'-a', 'stdout',
'-a', 'stderr',
'--rm',
'-v', imagesPath + ':/code/images',
'westdc_dem'
]);
p.stdout.on(‘data’, function (data){
console.log(data.toString());
});
它现在不能按我的预期一行一行打印,而是整个执行完才打印,怎么才能让它一行一行输出呢?
var p = spawn(‘docker’, [
‘run’,
‘-i’,
‘-a’, ‘stdout’,
‘-a’, ‘stderr’,
‘–rm’,
‘-v’, imagesPath + ‘:/code/images’,
‘westdc_dem’
],{ stdio: ‘inherit’});
为啥不用 docker api
最终用 docker api 解决了,谢谢
谢谢!
在Node.js中执行Docker命令(如docker run
)并捕获其stdout输出,可以使用Node.js的child_process
模块。这个模块提供了生成子进程的方法,允许你执行shell命令并处理其输入输出。
以下是一个示例代码,展示了如何在Node.js中执行docker run
命令并打印其stdout输出:
const { exec } = require('child_process');
// Docker命令示例,替换为你实际的镜像和参数
const dockerCommand = 'docker run hello-world';
exec(dockerCommand, (error, stdout, stderr) => {
if (error) {
console.error(`执行错误: ${error}`);
return;
}
if (stderr) {
console.error(`标准错误输出: ${stderr}`);
return;
}
console.log(`标准输出:\n${stdout}`);
});
在这个例子中,exec
函数用于执行Docker命令。回调函数有三个参数:error
、stdout
和stderr
。如果命令执行成功,stdout
将包含命令的标准输出内容,你可以通过console.log
将其打印到控制台。如果命令执行失败,error
或stderr
将包含错误信息。
注意,对于长时间运行的进程或需要流式处理输出的场景,建议使用spawn
方法而不是exec
。spawn
允许你逐块读取输出,这对于处理大量数据或实时日志非常有用。
确保你的Node.js环境有权限执行Docker命令,并且Docker守护进程正在运行。