2017-03-29 18 views
79

Używam następujące polecenie z mojego Jenkinsfile jednak pojawia się błąd the input device is not a TTYurządzenie wejściowe nie jest TTY

docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh 

Czy istnieje sposób, aby uruchomić skrypt z Jenkinsfile bez robienia tryb interaktywny.

I w zasadzie już plik o nazwie script.sh które chciałbym uruchomić wewnątrz pojemnika Döcker

+2

Możliwym duplikatem [sposobu obejścia "urządzenia wejściowego nie jest TTY" podczas korzystania z pomijania w celu wywołania skryptu wywołującego działanie dockera?] (Http://stackoverflow.com/questions/40536778/how-to -work-input-device-is-not-a-tty-when-using-chrab-shell-to-invo) – BMitch

Odpowiedz

136

Zdjąć -it z CLI, aby go non interaktywne i usunąć TTY. Jeśli nie potrzebujesz, np. wykonując swoją komendę w skrypcie Jenkinsa lub crona, powinieneś to zrobić.

Lub możesz zmienić to na -i, jeśli masz wejście wyprowadzone do polecenia dokowania, które nie pochodzi z TTY. Jeśli masz coś w rodzaju linii poleceń: xyz | docker ... lub docker ... <input, zrób to.

Lub możesz zmienić to na -t, jeśli chcesz obsługiwać TTY, ale nie masz jej w urządzeniu wejściowym. Zrób to dla kolorowego formatowania danych wyjściowych w dziennikach lub dla późniejszego dołączenia do kontenera za pomocą właściwego terminala.

Jeśli potrzebujesz interaktywnego terminala i nie działa on w terminalu w systemie Linux lub MacOS, użyj innego interfejsu wiersza poleceń. Program PowerShell informuje o włączeniu tej obsługi w systemie Windows.


Co to jest TTY? Jest to interfejs terminalowy obsługujący wydruki kolorowe, sekwencje specjalne, przesuwanie kursora itp., Który pochodzi z dawnych terminali podłączonych do komputerów typu mainframe. Dzisiaj jest on dostarczany przez terminale poleceń systemu Linux i interfejsy ssh. Zobacz wikipedia article for more details.

14

Dla tych, którzy zmagają się z tym błędem i git bash w systemie Windows, po prostu użyj PowerShell, gdzie -it działa idealnie.

+2

To nie odpowiada na pytanie. Pytanie dotyczy dockera w Jenkins, a nie git bash w Windows. – Keelan

+2

Dobrze. prawda, i nigdy nie było to zamierzone. Pytanie pojawia się w google podczas wyszukiwania tego konkretnego komunikatu o błędzie. Pomyślałem, lepiej mieć odpowiedź ** gdzieś ** niż nie mieć jej wcale.Najwyraźniej niektórzy ludzie uznali to za przydatne :) –

+1

To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. - [Z recenzji] (/ review/low-quality-posts/18799973) –

5

Uważam, że musisz być w TTY dla docker, aby móc przydzielić TTY (opcja -t). Jenkins wykonuje swoje zadania nie w TTY.

Po napisaniu skryptu, który uruchamiasz w Jenkins, możesz również uruchomić go lokalnie. W takim przypadku bardzo wygodne może być przydzielenie TTY, aby można było wysyłać sygnały takie jak ctrl + c podczas uruchamiania go lokalnie.

Aby rozwiązać ten problem zrobić skrypt ewentualnie użyć opcji -t, tak:

test -t 1 && USE_TTY="-t" 
docker run ${USE_TTY} ... 
1

przypadku Windows, spróbuj z cmd, dla mnie to działa. sprawdź, czy okno dokowane jest uruchomione.