Подтвердить что ты не робот

Docker exec -it возвращает "не может включить режим tty на входе без tty"

docker exec -it команда возвращает следующую ошибку: "невозможно включить tty-режим на входе без tty"

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

Я запускаю докер (1.4.1) в поле centos 6.6. Я пытаюсь выполнить следующую команду docker exec -it containerName /bin/bash но я получаю следующую ошибку

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

Ответ 1

Запуск docker exec -i вместо docker exec -it исправил мою проблему. Действительно, мой script был запущен CRONTAB, который не является терминалом.

Напоминаем:

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

Ответ 2

Если вы получаете эту ошибку в клиенте docker для Windows, вам может потребоваться использовать команду запуска ниже

$ winpty docker run -it ubuntu /bin/bash

Ответ 3

просто используйте "-i"

docker exec -i [ваш-ps] [команда]

Ответ 4

Если вы используете Windows и используете докер-машину, и вы используете GIT Bash или Cygwin, чтобы "попасть внутрь" работающего контейнера, вам нужно сделать следующее:

docker-machine ssh default в ssh на виртуальную машину (скорее всего, Virtualbox)

docker exec -it <container> bash, чтобы попасть в контейнер.

EDIT:

Недавно я обнаружил, что если вы используете Windows PowerShell, вы можете выполнить докеры непосредственно в контейнере с помощью Cygwin или GIT Bash, вы можете использовать winpty docker exec -it <container> bash и пропустить шаг docker-machine ssh выше.

Ответ 5

Я получаю "не могу включить tty mode on non tty input" для следующей команды в окнах с boot2docker

docker exec -it <containerIdOrName> bash

Ниже команды исправлена ​​проблема

winpty docker exec -it <containerIdOrName> bash

Ответ 6

docker exec запускает новую команду в уже запущенном контейнере. Это не способ запуска нового контейнера - используйте docker run для этого.

Это может быть причиной ошибки ввода "non tty input". Или это может быть то, где вы используете докер. Это настоящий терминал? То есть, имеется ли полная сессия tty? Вы можете проверить, находитесь ли вы в интерактивном сеансе с

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

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

Ответ 7

Я столкнулся с этим же сообщением об ошибке в Windows 7 64bit, используя Mintty, поставляемый с Git для Windows. $docker run -i -t ubuntu /bin/bash cannot enable tty mode on non tty input

Я попытался префикс указанной выше команды winpty, как и другие предложенные ответы, но ее запуск показал мне еще одно сообщение об ошибке ниже: $ 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..

Затем мне пришлось запустить следующую команду, которая дала мне то, что я хочу: $ winpty docker run -i -t ubuntu bash [email protected]:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr [email protected]:/#

Ответ 8

Я запускаю docker exec -it в jenkins jobs и get error 'не может включить tty-режим для ввода без tty. Нет возврата к команде docker exec. Моя учетная запись была следующей:

jenkins shell -> ssh [email protected]<testdriver> -> ssh [email protected]<sut> -> su - <user> -> docker exec -it <container>

Я внес изменения в использование флага -T в исходном ssh из jenkins. "-T - Отключить псевдотерминальное распределение". И используйте -i флаг с docker exec вместо -it. "-i - interactive. -t - выделить псевдо-tty.". Это, похоже, решило мою проблему.

jenkins shell -> ssh -T [email protected]<testdriver> -> ssh [email protected]<sut> -> su - <user> -> docker exec -i <container>

Тип поведения соответствует этой ошибке docker exec tty: https://github.com/docker/docker/issues/8755. Обходной путь в этом обсуждении ошибок докеров предполагает использование этого:

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

Использование этого обходного решения не помогло решить мою проблему. Это интересно. Попробуйте использовать их с помощью разных флагов и при разных вызовах ssh вы можете видеть "не tty" даже при использовании -t с 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