docker exec-it returns " ne peut pas activer le mode tty sur l'entrée non tty"
docker exec -it
la commande retourne l'erreur suivante "ne peut pas activer le mode ATS sur l'entrée non ATS"
level="fatal" msg="cannot enable tty mode on non tty input"
je lance docker(1.4.1) sur centos box 6.6.
Je suis en train d'exécuter la commande suivante
docker exec -it containerName /bin/bash
mais j'obtiens l'erreur suivante
level="fatal" msg="cannot enable tty mode on non tty input"
8 réponses
Running docker exec -i
au lieu de docker exec -it
résolu mon problème. En effet, mon script a été lancé par CRONTAB qui n'est pas un terminal.
comme 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 Windows docker client alors vous pouvez avoir besoin d'utiliser la commande run comme ci-dessous
$ winpty docker run -it ubuntu /bin/bash
il suffit d'utiliser "i",
docker exec -je [votre-ps] [commande]
si vous êtes sous Windows et que vous utilisez docker-machine et que vous utilisez GIT Bash ou Cygwin, pour "entrer" dans un conteneur, vous devez faire ce qui suit:
docker-machine ssh default
pour faire un ssh sur la machine virtuelle (Virtualbox plus probable)
docker exec -it <container> bash
pour entrer dans le conteneur.
EDIT:
j'ai récemment découvert que si vous utilisez Windows PowerShell vous pouvez docker exec directement dans le container, avec Cygwin ou Git Bash vous pouvez utiliser winpty docker exec -it <container> bash
et sauter l'étape docker-machine ssh
ci-dessus.
j'ai "impossible d'activer le mode tty sur la non ats d'entrée" pour la commande suivante sur windows avec boot2docker
docker exec -it <containerIdOrName> bash
ci-dessous la commande a corrigé le problème
winpty docker exec -it <containerIdOrName> bash
docker exec
exécute une nouvelle commande dans un conteneur déjà en marche . Ce n'est pas la façon de démarrer un nouveau conteneur -- utilisez docker run
pour cela.
qui peut être la cause de l'erreur" entrée non ATS". Ou peut-être lorsque vous exécutez le panneau. Est-ce un vrai terminal? Autrement dit, Est-ce qu'une séance complète par ATS est disponible? Vous pourriez vouloir vérifier si vous êtes dans une session interactive avec
[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'
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 64bit en utilisant Mintty envoyé 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 d'autres réponses suggérées mais l'exécution 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..
alors j'ai exécuté la commande suivante qui m'a donné ce que je veux:
$ 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 jenkins jobs et j'obtiens erreur "ne peut pas activer le mode tty sur Entrée non tty". Aucune sortie à la commande docker exec n'est retournée. Ma séquence d'ouverture de session était:
jenkins shell -> ssh user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -it <container>
j'ai fait un changement pour utiliser le drapeau-T dans le SSH initial de jenkins. "-T - Désactiver le pseudo-terminal de l'allocation". Et utilisez-Je flag avec docker exec au lieu de-it. "-je - interactive. - t-attribuer pseudo tty.". Cela semble avoir résolu mon problème.
jenkins shell -> ssh -T user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -i <container>
Type de comportement correspondant à ce bogue tty docker exec: https://github.com/docker/docker/issues/8755 . La discussion sur le bogue docker suggère d'utiliser ceci:
docker exec -it <CONTAINER> script -qc <COMMAND>
utiliser cette solution n'a pas résolu mon problème. Il est intéressant cependant. Essayez ceux-ci en utilisant différents drapeaux et sous différentes invocations ssh, vous pouvez voir 'pas un tty' même en utilisant-t avec docker exec:
$ docker exec -it <CONTAINER> script -qc 'tty'
/dev/pts/0
$ docker exec -it <CONTAINER> 'tty'
not a tty
$ docker exec -it <CONTAINER> bash -c 'tty'
not a tty