2017-06-24 1 views
0

Lorsque j'exécute docker pull my-image à partir de mon terminal, voici à quoi ressemble ma sortie.L'extraction Docker ne donne pas de temps de téléchargement/taille totale lors de l'exécution via la synchronisation de processus enfant Node.js

59e69571f6c7: Pull complete 
43da27f69c98: Pull complete 
d22174e9eddd: Pull complete 
cc0ac48a6d21: Downloading 312.3 MB/2.888 GB 
b47aa969d5dc: Download complete 

Quand je lance un morceau de code 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}'); 
}); 

Ma sortie se présente comme suit.

c49bda5ed612: Waiting 
43da27f69c98: Verifying Checksum 
43da27f69c98: Download complete 
d22174e9eddd: Verifying Checksum 
d22174e9eddd: Download complete 
b47aa969d5dc: Verifying Checksum 

Je m'attendais à la même sortie. Principalement l'information concernant combien est téléchargé et reste. Si je veux avancer une barre de progression basée sur la taille de l'image téléchargée, il n'y a aucun moyen de faire avec cette sortie

Veuillez me faire savoir s'il y a un moyen de trouver l'état de la taille de téléchargement en temps réel.

FYI si vous téléchargez un binaire à partir de curl, dans la commande exec Node.js vous obtenez les octets en temps réel téléchargés/données totales.

+0

Alors, quelle est la question? –

+0

'312.3 MB/2.888 GB' Cette infirmation n'est pas visible lorsqu'elle est exécutée dans Node.js –

Répondre

0

La sortie que vous mentionnez ne se produit que si l'interface de ligne de commande docker s'exécute quelque part où un pseudo-terminal est affecté. Vous pouvez forcer la sortie à ne pas avoir un pseudo-TTY sur la ligne de commande en exécutant la commande de cette façon:

docker pull my-image | cat 

Le pôle va se passer, et vous obtiendrez le même genre de sortie que vous avez mentionné ci-dessus.

Il est probable que la façon dont vous appelez l'interface de ligne de commande docker n'alloue pas le pseudo-tty, ce qui l'empêche de diffuser les informations de progression vers la sortie standard.

Essayez d'appeler l'exécutable avec un pseudo-tty alloué pour obtenir le comportement souhaité.

+0

Merci pour votre explication. Je n'avais pas beaucoup d'idée sur ce concept. Maintenant je suis familier. Cependant, j'ai essayé de trouver l'activation de tty dans nodejs spwan/child mais pas de chance. Ce serait vraiment génial si vous pouviez me dire comment le faire. –