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"
Ответы
Ответ 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