Erreur “Le périphérique d’entrée n’est pas un TTY”

Je Jenkinsfile commande suivante depuis mon Jenkinsfile . Cependant, j’obtiens l’erreur “Le périphérique d’entrée n’est pas un TTY” .

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

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

J’ai essentiellement un fichier appelé script.sh que je voudrais exécuter dans le conteneur Docker.

Supprimez le -it de votre cli pour le rendre non interactif et supprimez le TTY. Si vous n’en avez pas besoin non plus, par exemple en exécutant votre commande dans un script Jenkins ou cron, vous devriez le faire.

Ou vous pouvez le changer à -i si vous avez introduit une entrée dans la commande docker qui ne provient pas d’un ATS. Si vous avez quelque chose comme xyz | docker ... xyz | docker ... ou docker ... dans votre ligne de commande, faites ceci.

Ou vous pouvez le changer en -t si vous voulez le support TTY mais ne l'avez pas disponible sur le périphérique d'entrée. Faites-le pour la mise en forme couleur de la sortie dans vos journaux ou lorsque vous vous connecterez ultérieurement au conteneur avec un terminal approprié.

Ou, si vous avez besoin d'un terminal interactif et que vous n'exécutez pas de terminal sous Linux ou MacOS, utilisez une interface de ligne de commande différente. PowerShell est censé inclure ce support sous Windows.


Qu'est ce qu'un ATS? C'est une interface de terminal qui prend en charge la sortie couleur, les séquences d'échappement, le déplacement du curseur, etc. Aujourd'hui, il est fourni par les terminaux de commande Linux et les interfaces ssh. Voir l' article de Wikipedia pour plus de détails .

Pour ceux qui ont du mal avec cette erreur et git bash sous Windows, utilisez simplement PowerShell où -it fonctionne parfaitement.

Je pense que vous devez être dans un TTY pour que docker puisse allouer un TTY (l’option -t ). Jenkins exécute ses tâches non dans un ATS.

Cela dit, le script que vous exécutez dans Jenkins, vous souhaiterez peut-être également l’exécuter localement. Dans ce cas, il peut être très pratique d’atsortingbuer un TTY pour pouvoir envoyer des signaux comme ctrl + c lors de l’exécution locale.

Pour corriger cela, faites en sorte que votre script utilise l’option -t , comme ceci:

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

Si vous êtes (comme moi) en utilisant git bash sur windows, il vous suffit de mettre

Winpty

avant votre “ligne de docker”:

 winpty docker exec -it some_cassandra bash 

Si vous utilisez Windows, essayez avec cmd, pour moi ça marche. vérifier si le menu fixe est démarré.