当我从终端运行docker pull my-image
时,这就是我的输出结果。
59e69571f6c7: Pull complete
43da27f69c98: Pull complete
d22174e9eddd: Pull complete
cc0ac48a6d21: Downloading 312.3 MB/2.888 GB
b47aa969d5dc: Download complete
当我运行一段Node.js代码时
const { exec } = require('child_process');
exec('docker pull my-image', (error, stdout, stderr) => {
if (error) {
console.error('exec error: ${error}');
return;
}
console.log('stdout: ${stdout}');
console.log('stderr: ${stderr}');
});
我的输出看起来像这样。
c49bda5ed612: Waiting
43da27f69c98: Verifying Checksum
43da27f69c98: Download complete
d22174e9eddd: Verifying Checksum
d22174e9eddd: Download complete
b47aa969d5dc: Verifying Checksum
我期待相同的输出。主要是关于下载和剩余多少的信息。如果我想根据下载的图像大小推进进度条,则无法使用此输出
如果有办法找到实时下载大小状态,请告诉我。
如果您从curl下载任何二进制文件,在Node.js exec命令中,您将获得下载的实时字节数/总数据。
答案 0 :(得分:0)
如果docker
CLI正在某个已分配伪tty的地方运行,那么您提到的输出只会发生。您可以通过以下方式运行命令来强制输出在命令行上没有伪tty:
docker pull my-image | cat
极点会发生,然后你会得到你上面提到的那种输出。
您调用docker
CLI的方式可能不是分配伪tty,导致它不将进度信息流式传输到标准输出。
尝试使用分配的伪tty调用可执行文件以获得所需的行为。