使用承诺时如何从 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.stdout
、process.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))
我正在按照示例 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.stdout
、process.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))