gpt4 book ai didi

node.js - 使用 Promise 时如何从 dockerode 捕获标准输出?

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:06 25 4
gpt4 key购买 nike

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

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

我的代码是:

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.stdout, process.stderr]流是底层stdio数据的管道传输位置至。

将这些参数更改为您控制的可写流。您可以使用类似 memory stream 的内容, a file或实现 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))

关于node.js - 使用 Promise 时如何从 dockerode 捕获标准输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59959647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com