Ошибка докера: устройство ввода не TTY. Если вы используете mintty, попробуйте добавить префикс команды к winpty
После того, как я запускаю это$ docker run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev
Я получаю следующую ошибку the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
Что я должен использовать здесь, я бегу на Windows 8 в MINGW64.
6 ответов
Как следует из полученного сообщения об ошибке, вы должны попытаться использовать winpty (который устанавливается по умолчанию вместе с Git-Bash) и запустить:
winpty docker run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev
Если это работает, вы можете установить псевдоним Bash, чтобы избежать предварительного добавления winpty
все время:
echo "alias docker='winpty docker'" >> ~/.bashrc
или же
echo "alias docker='winpty docker'" >> ~/.bash_profile
Если вы используете Git Bash, вы можете попробовать вот так
winpty docker run -it ubuntu
Эта проблема возникает при запуске с -it
возможность использования терминала bash на windows. Вы можете использовать Powershell для решения этой проблемы.
У меня это работает. Я использую git bash в Windows
winpty docker-compose exec app ls -l
Удалить -it
из команды. Если вы хотите, чтобы он был интерактивным, то продолжайте -i
Не использовать alias docker="winpty docker"
. Это решает вашу проблему, но ломает трубы.
$ winpty docker run -ti ubuntu
root@e85cff7d1670:/# exit
$ wintpy docker run ubuntu bash HELLO
HELLO
$ wintpy docker run ubuntu bash HELLO | cat
stdout is not a tty
Скопируйте это в свой.bashrc. Этот скрипт используетwinpty docker
только если -ti
используется.
function docker(){
for param; do if [[ "$param" == "-ti" ]] || [[ "$param" == "-it" ]]; then
winpty docker "$@"; return
fi; done;
command docker "$@"
}
docker run -ti ubuntu
становится winpty docker run -ti ubuntu
избегает error: the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'"
docker run ubuntu echo "what's up" | cat
становится command docker run echo "what'up" | cat
избегает error: stdout is not a tty
Сценарий только проверяет наличие параметра '-it', не проверяя, находится ли он внутри предложения 'docker run'... но он помогает мне.
Проблема с gitbash, однако с PowerShell он работает нормально.
Вы запустили "Docker Quickstart Terminal"? Я пытался бежать
$ docker run -i -t redcricket/react-tutorial:latest /bin/bash
на Windows из оболочки Cygwin Bash и получил ту же ошибку:
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
Затем я вспомнил, что, когда я установил Docker в моей системе Windows 10, было установлено что-то под названием "Docker Quickstart Terminal". Вы должны начать это сначала с этого тупого окна "Напечатайте здесь, чтобы искать" вещь на панели задач:
Это запускает это...
… Вы можете запускать там свои команды docker без этой ошибки или запуска winpty.
Просто добавьте winpty в начало вашего cmd, попробуйте ниже:
$ winpty docker.exe run --rm -v "/c/users/vipul rao/documents/github/wappalyzer:/opt/wappalyzer" -it wappalyzer/dev
Почему так происходит? Подробнее здесь:http://willi.am/blog/2016/08/08/docker-for-windows-interactive-sessions-in-mintty-git-bash/
Со мной случилось. Из Git Bash в Windows 8 под управлением Docker Toolbox. Происходят две вещи. Из git bash у нас, похоже, нет полной эскалации привилегий демону docker (хотя я запускаю git bash с правами администратора). Таким образом:
Попробуйте запустить команду из своего докер-терминала. (дает вам привилегию).
Чтобы компенсировать ошибки форматов именования папок Windows, не забудьте указать путь в кавычки.. (чтобы избежать пробелов и / или ошибок заглавной буквы), скажите
Из:
docker run -v $(pwd):/data image_ref
Кому:
docker run -v "$(pwd):/data" image_ref
(обратите внимание на заключительные кавычки вокруг $(pwd):/data
).
Получил эту ошибку для запуска docker-compose exec workspace bash
Так что просто префикс с winpty winpty docker-compose exec workspace bash
Возможно, вы не запускаете команды в терминале Docker. Если вы этого не сделаете, возможно, вы неправильно подключены к демону Docker и не сможете правильно взаимодействовать.
Убедитесь, что вы выполняете команды в реальном Docker Terminal.
Для тех, кто использует WSL и запускает Docker для окон внутри cmder или conemu, я бы рекомендовал не использовать Docker, который установлен на окнах в "Program Files", а вместо этого установить Docker внутри WSL на ubuntu/linux. Помните, однако, что вы не можете запустить сам Docker из WSL, вы должны подключиться к Docker, работающему в Windows, из клиента Linux Docker, установленного в WSL.
Чтобы установить Docker на WSL
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce
Возможны следующие варианты запуска реальных команд Docker: Подключитесь к Docker с помощью ключа -H
docker -H localhost:2375 run -it -v /mnt/c/code:/var/app -w "/var/app" centos:7
Или установите переменную окружения docker_host
export DOCKER_HOST=tcp://localhost:2375
В любом случае, теперь вы сможете интерактивно подключаться к работающему контейнеру Docker.
У меня была такая же ошибка при попытке запустить docker-compose exec
команда. В справочной документацииdocker-compose exec --help
он показывает, как вы можете отключить выделение псевдо-tty, добавив -T
в параметры вашей команды следующим образом:
docker-compose exec-T
Из справочной документации:
-T Disable pseudo-tty allocation. By default docker-compose exec allocates a TTY.
В дополнение к вышеупомянутым решениям. В случае, если вы получаете эту ошибку для присоединения докера
пример: docker attach alpine1
ошибка: the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
Решение: добавление winpty перед командой docker, т.е. winpty docker attach, должно работать.
пример: winpty docker attach alpine1
Примечание: я получал эту ошибку при использовании базы на Windows, и это решение работало для меня.
Вы можете попробовать с помощью инструмента Cmder, он будет работать. Это не работает с Gitbash
Если вы используете gitbash, проблема заключается в настройке эмулятора терминала для использования с Git bash. установка эмулятора
Вместо этого вы можете изменить эмулятор на первые параметры или использовать команду
winpty перед командой запуска докера.