当通过Node.js子进程同步执行时,Docker pull没有给出实时的下载大小/总大小

时间:2017-06-24 19:57:17

标签: javascript node.js docker exec child-process

当我从终端运行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命令中,您将获得下载的实时字节数/总数据。

1 个答案:

答案 0 :(得分:0)

如果docker CLI正在某个已分配伪tty的地方运行,那么您提到的输出只会发生。您可以通过以下方式运行命令来强制输出在命令行上没有伪tty:

docker pull my-image | cat

极点会发生,然后你会得到你上面提到的那种输出。

您调用docker CLI的方式可能不是分配伪tty,导致它不将进度信息流式传输到标准输出。

尝试使用分配的伪tty调用可执行文件以获得所需的行为。