首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用promises时,如何从dockerode捕获stdout?

在使用promises时,如何从dockerode捕获stdout?
EN

Stack Overflow用户
提问于 2020-01-29 10:07:38
回答 1查看 688关注 0票数 4

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

我遇到的问题是容器的输出打印到stdout,但我正在尝试捕获它并将其存储在一个变量中,同时尽可能使用promises。

我的代码是:

代码语言:javascript
复制
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));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-29 16:34:49

对于docker.run()process.stdoutprocess.stderr流是底层stdio数据通过管道传输到的地方。

将这些参数更改为您控制的可写流。您可以使用诸如memory streama file或自己实现stream之类的东西。

代码语言:javascript
复制
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))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59959647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档