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" 
57
demandé sur Stéphane Bruckert 2015-04-01 02:34:49

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
79
répondu Stéphane Bruckert 2015-11-04 17:16:22

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

14
répondu Senthil 2015-12-26 23:18:37

il suffit d'utiliser "i",

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

8
répondu Mr.Thanks 2016-08-17 14:34:23

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.

7
répondu alvinc 2016-08-01 12:10:10

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
5
répondu raok1997 2015-12-31 19:37:22

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

4
répondu Andy 2017-04-13 12:36:27

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:/#

3
répondu leon 2016-04-12 04:47:53

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
0
répondu gaoithe 2016-07-29 11:58:58