使用承诺时如何从 dockerode 捕获标准输出?

How can i capture stdout from dockerode when using promises?

我正在按照示例 here 使用 dockerode 尝试 运行 一个 docker 容器。

我遇到的问题是容器的输出打印到标准输出,但我试图捕获它并将其存储在变量中,同时尽可能使用承诺。

我的代码是:

const Docker = require('dockerode');

const docker = new Docker();

docker
    .run(
        'wappalyzer/cli',
        ['https://www.wappalyzer.com'],
        [process.stdout, process.stderr],
        { Tty: false }
    )
    .then((data) => {
        let output = data[0];
        let container = data[1];
        console.log(typeof output);
        console.log(output);
        return container.remove();
    })
    .catch((error) => console.log(error));

对于 docker.run(),[process.stdoutprocess.stderr ] 流是基础 stdio 数据通过管道传输到的位置。

将这些参数更改为您控制的可写流。您可以自己使用 memory stream, a file or implement a stream 之类的东西。

const Docker = require('dockerode')
const streams = require('memory-streams')

const docker = new Docker()
const stdout = new streams.WritableStream()
const stderr = new streams.WritableStream()

docker.run(
    'debian:10',
    ['sh', '-c', 'echo test; echo testerr >/dev/stderr; echo test3'],
    [stdout, stderr],
    { Tty: false }
  )
  .then(([ res, container ]) => {
      console.log(res)
      console.log('stdout: %j', stdout.toString())
      console.log('stderr: %j', stderr.toString())
      return container.remove()
  })
  .catch((error) => console.log(error))