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()); });

它现在不能按我的预期一行一行打印,而是整个执行完才打印,怎么才能让它一行一行输出呢?


5 回复

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命令。回调函数有三个参数:errorstdoutstderr。如果命令执行成功,stdout将包含命令的标准输出内容,你可以通过console.log将其打印到控制台。如果命令执行失败,errorstderr将包含错误信息。

注意,对于长时间运行的进程或需要流式处理输出的场景,建议使用spawn方法而不是execspawn允许你逐块读取输出,这对于处理大量数据或实时日志非常有用。

确保你的Node.js环境有权限执行Docker命令,并且Docker守护进程正在运行。

回到顶部