891 votes

Erreur "Le périphérique d'entrée n'est pas un téléscripteur"

J'exécute la commande suivante à partir de mon Jenkinsfile . Cependant, je reçois le message d'erreur "Le périphérique d'entrée n'est pas un téléscripteur" .

 docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
 

Existe-t-il un moyen d’exécuter le script à partir des Jenkinsfile sans passer en mode interactif?

J'ai essentiellement un fichier appelé script.sh que je voudrais exécuter à l'intérieur du conteneur Docker.

1271voto

BMitch Points 3744

Supprimer l' -it de vos cli afin de le rendre interactif et supprimer l'ATS. Si vous n'en avez pas besoin, par exemple, l'exécution de votre commande à l'intérieur d'un Jenkins ou cron script, vous devriez le faire.

Ou vous pouvez la changer en -i si vous avez entrée courante dans le panneau de commande qui ne viennent pas d'un ATS. Si vous avez quelque chose comme xyz | docker ... ou docker ... <input dans votre ligne de commande, faire.

Ou vous pouvez la changer en -t si vous souhaitez la prise en charge TTY mais n'est pas disponible sur le périphérique d'entrée. Faites cela pour la couleur de formatage de la sortie dans les journaux, ou pour plus tard lorsque vous fixez le récipient avec un terminal adéquat.

Ou si vous avez besoin d'une borne interactive et ne sont pas en cours d'exécution dans un terminal sous Linux ou MacOS, utiliser une autre interface de ligne de commande. PowerShell est notamment cette prise en charge sur Windows.


Qu'est ce qu'un TTY? C'est un terminal d'interface qui prend en charge la sortie de la couleur, des séquences d'échappement, déplacer le curseur, etc, qui vient du vieux jours de terminaux rattachés à des mainframes. Aujourd'hui, il est fourni par la commande Linux bornes et ssh interfaces. Voir l' article de wikipédia pour plus de détails.

165voto

Piotr Justyna Points 2140

Pour ceux qui ont des problèmes avec cette erreur et git bash sous Windows, utilisez simplement PowerShell où -it fonctionne parfaitement.

97voto

Gremi64 Points 531

Si vous utilisez (comme moi) git bash sous windows, il vous suffit de mettre

heureux

avant votre 'ligne de docker':

 winpty docker exec -it some_cassandra bash
 

68voto

Gareth A. Lloyd Points 472

Je crois que vous devez être dans un TTY pour docker pour être en mesure d'allouer un ATS ( -t option). Jenkins s'exécute ses travaux pas dans un TTY.

Cela dit, le script en cours d'exécution dans Jenkins, vous pouvez également exécuter localement. Dans ce cas, il peut être vraiment pratique d'avoir un ATS alloués de sorte que vous pouvez envoyer des signaux tels que ctrl+c lors de l'exécution locale.

Pour résoudre ce rendre votre script éventuellement utiliser l' -t option, comme suit:

test -t 1 && USE_TTY="-t" 
docker run ${USE_TTY} ...

4voto

Si vous utilisez Windows, essayez avec cmd, cela fonctionne pour moi. vérifiez si le menu fixe est démarré.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X