docker exec -it renvoie «impossible d’activer le mode tty sur une entrée autre que tty»

docker exec -it commande docker exec -it renvoie l’erreur suivante “impossible d’activer le mode tty sur l’entrée non-tty”

 level="fatal" msg="cannot enable tty mode on non tty input" 

Je cours docker (1.4.1) sur centos box 6.6. J’essaie d’exécuter la commande suivante docker exec -it containerName /bin/bash mais docker exec -it containerName /bin/bash erreur suivante

 level="fatal" msg="cannot enable tty mode on non tty input" 

Exécuter docker exec -i au lieu de docker exec -it corrigé mon problème. En effet, mon script a été lancé par CRONTAB qui n’est pas un terminal.

Pour rappel:

 Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in a running container -i, --interactive=false Keep STDIN open even if not attached -t, --tty=false Allocate a pseudo-TTY 

Si vous obtenez cette erreur dans le client Windows Docker, vous devrez peut-être utiliser la commande d’exécution ci-dessous.

$ winpty docker run -it ubuntu /bin/bash

utilisez simplement “-i”

docker exec -i [votre-ps] [commande]

Si vous utilisez Windows et que vous utilisez docker-machine et que vous utilisez GIT Bash ou Cygwin, vous devez effectuer les opérations suivantes pour pouvoir accéder à un conteneur en cours d’exécution:

docker-machine ssh default à ssh dans la machine virtuelle (Virtualbox le plus probable)

docker exec -it bash pour entrer dans le conteneur.

MODIFIER:

J’ai récemment découvert que si vous utilisez Windows PowerShell, vous pouvez ancrer exec directement dans le conteneur, avec Cygwin ou Git Bash, vous pouvez utiliser winpty docker exec -it bash et ignorer l’étape docker-machine ssh ci-dessus.

J’obtiens “impossible d’activer le mode tty sur l’entrée non-tty” pour la commande suivante sur Windows avec boot2docker

 docker exec -it  bash 

La commande ci-dessous a résolu le problème

 winpty docker exec -it  bash 

docker exec exécute une nouvelle commande dans un conteneur déjà en cours d’exécution . Ce n’est pas la manière de démarrer un nouveau conteneur – utilisez le docker run pour cela.

Cela peut être la cause de l’erreur “non tty input”. Ou ce pourrait être l’endroit où vous exécutez docker. Est-ce un vrai terminal? C’est-à-dire, une session complète de tty est-elle disponible? Vous voudrez peut-être vérifier si vous êtes dans une session interactive avec

 [[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive' 

à partir de https://unix.stackexchange.com/questions/26676/how-to-check-if-a-shell-is-login-interactive-batch

J’ai rencontré ce même message d’erreur dans Windows 7 64 bits en utilisant Mintty fourni avec Git pour Windows. $docker run -i -t ubuntu /bin/bash cannot enable tty mode on non tty input

J’ai essayé de préfixer la commande ci-dessus avec winpty comme les autres réponses suggérées mais en cours d’exécution, il m’a montré un autre message d’erreur ci-dessous: $ winpty docker run -i -t ubuntu /bin/bash exec: "D:\\Git\\usr\\bin\\bash": executable file not found in $PATH docker: Error response from daemon: Container command not found or does not exist..

Ensuite, j’ai exécuté la commande suivante qui m’a donné ce que je voulais: $ winpty docker run -i -t ubuntu bash root@512997713d49:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@512997713d49:/#

J’exécute docker exec -it sous les travaux jenkins et obtenir une erreur ‘ne peut pas activer le mode tty sur les entrées non-tty’. Aucune sortie vers la commande docker exec n’est renvoyée. La séquence de connexion de mon travail était la suivante:

 jenkins shell -> ssh user@ -> ssh root@ -> su -  -> docker exec -it  

J’ai fait un changement pour utiliser l’option -T dans le ssh initial de jenkins. “-T – Désactive l’allocation pseudo-terminale”. Et utilisez l’option -i avec docker exec au lieu de -it. “-i – interactive. -t – atsortingbue une pseudo tty.”. Cela semble avoir résolu mon problème.

 jenkins shell -> ssh -T user@ -> ssh root@ -> su -  -> docker exec -i  

Comportement type correspond à ce bug de docker exec tty: https://github.com/docker/docker/issues/8755 . Une solution de contournement sur cette discussion de bogue de docker suggère d’utiliser ceci:

 docker exec -it  script -qc  

L’utilisation de cette solution de contournement n’a pas résolu mon problème. C’est intéressant cependant. Essayez ceux-ci en utilisant différents indicateurs et sous différentes invocations ssh, vous pouvez voir “pas un tty” même en utilisant -t avec docker exec:

 $ docker exec -it  script -qc 'tty' /dev/pts/0 $ docker exec -it  'tty' not a tty $ docker exec -it  bash -c 'tty' not a tty