web-dev-qa-db-fra.com

docker exec -it return "ne peut pas activer le mode tty sur une entrée non tty"

La commande docker exec -it Renvoie l'erreur suivante "Impossible d'activer le mode tty avec une entrée non tty"

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

J'exécute docker (1.4.1) sur la boîte 6.6 de centos. J'essaie 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" 
58
user2118095

Fonctionnement 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.

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
82

Si vous obtenez cette erreur dans client docker Windows, vous devrez peut-être utiliser la commande run comme ci-dessous.

$ winpty docker run -it ubuntu /bin/bash

14
Senthil

utilisez simplement "-i"

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

9
Mr.Thanks

Si vous utilisez Windows et utilisez docker-machine et que vous utilisez GIT Bash ou Cygwin, pour "entrer dans" un conteneur en cours d'exécution, vous devez procéder comme suit:

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

docker exec -it <container> bash pour entrer dans le conteneur.

MODIFIER:

J'ai récemment découvert que si vous utilisez Windows PowerShell, vous pouvez directement exécuter le menu fixe dans le conteneur. Avec Cygwin ou Git Bash, vous pouvez utiliser winpty docker exec -it <container> bash et passez le docker-machine ssh étape ci-dessus.

7
alvinc

J'obtiens "ne peux pas activer le mode tty sur une entrée non tty" pour la commande suivante sous Windows avec boot2docker

docker exec -it <containerIdOrName> bash

La commande ci-dessous corrige le problème

winpty docker exec -it <containerIdOrName> bash
5
raok1997

docker exec exécute une nouvelle commande dans un conteneur déjà en cours d'exécution . Ce n'est pas la façon de démarrer un nouveau conteneur - utilisez docker run pour ça.

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? Autrement dit, une session tty complète 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

4
Andy

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 le suggéraient d'autres réponses, mais son 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..

Ensuite, il m'est arrivé de lancer 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:/#

3
leon

J'exécute docker exec -it sous les travaux jenkins et obtiens une erreur "ne peut pas activer le mode tty sur une entrée non tty". Aucune sortie vers la commande docker exec n'est renvoyée. Ma séquence de connexion au travail était:

jenkins Shell -> ssh user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -it <container>

J'ai fait un changement pour utiliser -T flag dans le ssh initial de jenkins. "-T - Désactive l'allocation de pseudo-terminaux". Et utilisez -i flag avec docker exec au lieu de -it. "-i - interactif. -t - alloue une 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>

Le comportement kindof correspond à ce bogue de l'administrateur de docker: https://github.com/docker/docker/issues/8755 . Solution de contournement sur cette discussion de bogue docker suggère d'utiliser ceci:

docker exec -it <CONTAINER> script -qc <COMMAND>

Utiliser cette solution de contournement n'a pas résolu mon problème. C'est intéressant cependant. Essayez-les en utilisant différents drapeaux et sous différentes invocations ssh, vous pouvez voir 'pas un tty' même avec -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
gaoithe