Я запускаю следующую команду от моего Jenkinsfile
. Однако я получаю сообщение об ошибке «Устройство ввода не TTY» .
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
Есть ли способ запустить скрипт из Jenkinsfile
без интерактивного режима?
У меня есть файл с именем, script.sh
который я хотел бы запустить внутри контейнера Docker.
docker
jenkins
jenkins-pipeline
Энтони
источник
источник
Ответы:
Удалите
-it
из вашего Cli, чтобы сделать его не интерактивным и удалите TTY. Если вам это не нужно, например, запустите команду внутри скрипта Jenkins или cron, вам следует это сделать.Или вы можете изменить его,
-i
если у вас есть входные данные, введенные в команду docker, которая не приходит из TTY. Если у вас есть что-то вродеxyz | docker ...
илиdocker ... <input
в командной строке, сделайте это.Или вы можете изменить его на,
-t
если вы хотите поддержку TTY, но ее нет на устройстве ввода. Сделайте это для цветного форматирования вывода в ваших журналах или для последующего подключения к контейнеру с соответствующим терминалом.Или, если вам нужен интерактивный терминал и вы не работаете в терминале в Linux или MacOS, используйте другой интерфейс командной строки. Сообщается, что PowerShell включает эту поддержку в Windows.
Что такое TTY? Это интерфейс терминала, который поддерживает вывод цвета, escape-последовательности, перемещение курсора и т. Д., Который пришел из старых времен тупых терминалов, прикрепленных к мэйнфреймам. Сегодня это обеспечивается командными терминалами Linux и интерфейсами ssh. Смотрите статью в Википедии для более подробной информации .
источник
mysql -p
без указания пароля. При добавлении-i
пароля подсказка никогда не появляется. При простом добавлении-t
появляется подсказка, но кажется, что она вообще не читает ввод (который печатается буквально, а не скрывается подсказкой), даже при нажатии return; только Ctrl-C может закончить это. Можно ли каким-то образом использовать клиент MySQL с Docker таким образом?Для тех, кто борется с этой ошибкой и git bash на Windows, просто используйте PowerShell, где
-it
работает отлично.источник
Это не совсем то, что вы спрашиваете, но:
Ключ -T бы помочь людям , которые используют докер-создание сообщения Exec!
источник
docker-compose exec
выделяется TTY.Если вы (как и я) используете Git Bash на Windows, вам просто нужно поставить
перед вашей «линией докера»:
источник
winpty
?C:\Program Files\Git\usr\bin\winpty.exe
Я считаю, что вы должны быть в TTY для докера, чтобы иметь возможность выделить TTY (
-t
опция). Дженкинс выполняет свою работу не в TTY.Сказав это, скрипт, который вы запускаете в Jenkins, вы также можете запускать локально. В этом случае может быть очень удобно выделить TTY, чтобы вы могли отправлять сигналы типа ctrl+ cпри локальном запуске.
Чтобы это исправить, сделайте ваш скрипт по выбору, используя
-t
опцию, например так:источник
docker run…
команды из задачи make-файла, запускаемой с помощью git hookпри использовании 'git bash',
1) Я выполняю команду:
У меня есть ошибка:
2) затем я выполняю команду:
У меня есть другая ошибка:
3) в-третьих, я выполняю:
это сработало.
когда я использовал «powershell», все работало хорошо.
источник
если используете windows, попробуйте с cmd, у меня это работает. проверьте, запущен ли докер.
источник
winpty работает до тех пор, пока вы не укажете подключаемые тома, такие как ".: / mountpoint" или "$ {pwd}: / mountpoint"
Лучшее решение, которое я нашел, - это использовать плагин git-bash внутри Visual Code Studio и использовать терминал для запуска и остановки контейнеров или docker-compose.
источник
Я знаю, что это не прямой ответ на данный вопрос, но для всех, кто сталкивается с этим вопросом, кто использует WSL с Docker для Windows и cmder или conemu.
Хитрость заключается не в том, чтобы использовать Docker, который установлен в Windows по адресу / mnt / c / Program Files / Docker / Docker / resources / bin / docker.exe, а в том, чтобы установить Docker для Ubuntu / Linux. Стоит отметить, что вы не можете запустить сам Docker из WSL, но вы можете подключиться к Docker для Windows из клиента Linux Docker.
Установите Docker в Linux
Подключитесь к Docker для Windows через порт 2375, который необходимо включить в настройках Docker для Windows.
docker -H localhost:2375 run -it -v /mnt/c/code:/var/app -w "/var/app" centos:7
Или установите переменную docker_host, которая позволит вам опустить ключ -H
export DOCKER_HOST=tcp://localhost:2375
Теперь вы должны иметь возможность интерактивно подключаться к сеансу терминала tty.
источник
Мой шаг конвейера Jenkins, показанный ниже, завершился с той же ошибкой.
В моем файле сценария " build.sh " команда " docker run " выдает эту ошибку, когда она была выполнена заданием Jenkins. Однако он работал нормально, когда скрипт выполнялся в терминале оболочки. Ошибка произошла из-за того, что опция -t передана команде запуска docker, которая, как я знаю, пытается выделить терминал, и завершается неудачей, если нет терминала для выделения.
В моем случае я изменил скрипт на параметр -t, только если терминал может быть обнаружен. Вот код после изменений:
источник