J'exécute la commande suivante à partir de mon Jenkinsfile
. Cependant, j'obtiens l'erreur "Le périphérique d'entrée n'est pas un ATS" .
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
Existe-t-il un moyen d'exécuter le script à partir du Jenkinsfile
sans faire de mode interactif?
J'ai essentiellement un fichier appelé script.sh
que je voudrais exécuter à l'intérieur du conteneur Docker.
docker
jenkins
jenkins-pipeline
Anthony
la source
la source
Réponses:
Retirez le
-it
de votre cli pour le rendre non interactif et supprimez le TTY. Si vous n'avez pas besoin non plus, par exemple d'exécuter votre commande à l'intérieur d'un script Jenkins ou cron, vous devriez le faire.Ou vous pouvez le changer
-i
si vous avez introduit des entrées dans la commande docker qui ne proviennent pas d'un ATS. Si vous avez quelque chose commexyz | docker ...
oudocker ... <input
dans votre ligne de commande, faites cela.Ou vous pouvez le remplacer par
-t
si vous souhaitez un support TTY mais que vous ne l'avez pas disponible sur le périphérique d'entrée. Faites-le pour le formatage des couleurs de la sortie dans vos journaux, ou pour une connexion ultérieure au conteneur avec un terminal approprié.Ou si vous avez besoin d'un terminal interactif et que vous ne l'exécutez pas dans un terminal sous Linux ou MacOS, utilisez une interface de ligne de commande différente. Il est rapporté que PowerShell inclut cette prise en charge 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., qui provient de l'ancien temps des terminaux stupides attachés aux mainframes. Aujourd'hui, il est fourni par les terminaux de commande Linux et les interfaces ssh. Voir l' article wikipedia pour plus de détails .
la source
mysql -p
sans spécifier de mot de passe. Lorsque vous ajoutez simplement-i
l'invite de mot de passe n'apparaît jamais. Avec juste l'ajout de-t
l'invite apparaît, mais il semble ne pas lire du tout l'entrée (qui est imprimée littéralement au lieu d'être masquée par l'invite), même pas en appuyant sur retour; seul ctrl-c peut y mettre fin. Est-il possible d'utiliser le client mysql avec docker de cette façon?Pour ceux qui ont du mal avec cette erreur et git bash sous Windows, utilisez simplement PowerShell où cela
-it
fonctionne parfaitement.la source
Ce n'est pas exactement ce que vous demandez, mais:
La touche -T aiderait les personnes qui utilisent un docker-compose exec!
la source
docker-compose exec
alloue un ATS.Si vous utilisez (comme moi) git bash sur windows, il vous suffit de mettre
avant votre 'docker line':
la source
winpty
?C:\Program Files\Git\usr\bin\winpty.exe
Je crois que vous devez être dans un ATS pour que Docker puisse allouer un ATS (l'
-t
option). Jenkins exécute ses travaux pas dans un ATS.Cela dit, le script que vous exécutez dans Jenkins peut également être exécuté localement. Dans ce cas, il peut être très pratique d'avoir un TTY alloué afin que vous puissiez envoyer des signaux comme ctrl+ clorsque vous l'exécutez localement.
Pour résoudre ce problème, utilisez éventuellement votre script
-t
, comme ceci:la source
docker run…
lors de l'utilisation de 'git bash',
1) J'exécute la commande:
J'ai l'erreur:
2) puis, j'exécute la commande:
J'ai une autre erreur:
3) troisièmement, j'exécute:
ça a marché.
lorsque j'utilise «powershell», tout fonctionnait bien.
la source
si vous utilisez Windows, essayez avec cmd, pour moi cela fonctionne. vérifier si docker est démarré.
la source
winpty fonctionne tant que vous ne spécifiez pas les volumes à monter tels que ".: / mountpoint" ou "$ {pwd}: / mountpoint"
La meilleure solution de contournement que j'ai trouvée consiste à utiliser le plugin git-bash dans Visual Code Studio et à utiliser le terminal pour démarrer et arrêter des conteneurs ou docker-compose.
la source
Je sais que cela ne répond pas directement à la question posée, mais à quiconque rencontre cette question qui utilise WSL exécutant Docker pour Windows et cmder ou conemu.
L'astuce n'est pas d'utiliser Docker qui est installé sur Windows sous / mnt / c / Program Files / Docker / Docker / resources / bin / docker.exe mais plutôt d'installer ubuntu / linux Docker. Il convient de souligner que vous ne pouvez pas exécuter Docker lui-même à partir de WSL, mais vous pouvez vous connecter à Docker pour Windows à partir du client Linux Docker.
Installer Docker sur Linux
Connectez-vous à Docker pour Windows sur le port 2375 qui doit être activé à partir des paramètres de Docker pour Windows.
docker -H localhost:2375 run -it -v /mnt/c/code:/var/app -w "/var/app" centos:7
Ou définissez la variable docker_host qui vous permettra d'omettre le commutateur -H
export DOCKER_HOST=tcp://localhost:2375
Vous devriez maintenant pouvoir vous connecter de manière interactive avec une session de terminal tty.
la source
Mon étape de pipeline Jenkins illustrée ci-dessous a échoué avec la même erreur.
Dans mon fichier de script " build.sh ", la commande " docker run " affiche cette erreur lorsqu'elle a été exécutée par le travail Jenkins. Cependant, cela fonctionnait bien lorsque le script s'exécutait dans le terminal shell. L'erreur s'est produite en raison de l' option -t transmise à la commande docker run qui, comme je le sais, essaie d'allouer le terminal et échoue s'il n'y a pas de terminal à allouer.
Dans mon cas, j'ai changé le script pour passer l'option -t uniquement si un terminal pouvait être détecté. Voici le code après modifications:
la source