2016-03-17 14 views
5

Ho un programma di utilità che dipende dalle caratteristiche del terminale. Voglio eseguirlo all'interno di un contenitore docker. (il programma non è un programma interattivo in quanto tale. È un vecchio programma che è stato scritto in questo modo).Docker: esegue un programma che richiede tty

docker run -i -t o docker exec -i -t dovrebbe aprire un tty nel contenitore. Ma qui è quello che succede ..

[email protected]:~/region/primer/cobol_v> kickstop 
[Error] Unable to run without terminal device (tty) 
[email protected]:~/region/primer/cobol_v> tty 
not a tty 

Quando -t opzione per Docker di comando (run/exec) dovrebbe dare un 'tty', i comandi tty ritorna con 'non è una tty'. Questo è sconcertante.

Ho sperimentato questo su host e immagini di openSuse e fedora23, se questo è importante. Ho usato emulatori di terminale 'guake', MATE (Gnome?) Per questo, con gli stessi risultati.

C'è qualche soluzione a questo? o questo è di progettazione e devi sostituire/riscrivere la mia utilità?

+0

potete inserire 'echo $ TERM' quando all'interno del contenitore? – user2915097

+0

@ user2915097: la tua domanda mi ha portato ad eseguire alcuni esperimenti. Ho "risposto" alla mia domanda. Grazie. – yogmk

risposta

0

Ho eseguito alcuni esperimenti e qui ci sono risultati. Spero che qualcuno li trovi utili. (comandi della finestra mobile non sono completi, ma solo brevemente)

1. docker run -i -t 
> tty 
/dev/console 
> echo $TERM 
xterm 
>kickstop 
works!! 

2. docker -d seguito da docker exec -i -t

>tty 
not a tty 
>echo $TERM 
dumb 
>kickstop 
[Error] Unable to run without terminal device (tty) 

3. docker -d seguito da docker attach vieni attaccato a/dev/console. Nessun prompt (perché sto eseguendo tail -f xxx.log per mantenere vivo il contenitore). Infatti devo fermare mia applicazione da un altro terminale (usando finestra mobile EXEC) e fermare il contenitore per tornare al (shell host) pronta

4. docker start seguita da docker attach come sopra

+0

e quale emulatore di terminale che uso non ha alcuna relazione con questo, – yogmk

1

Sono corsa in stesso problema, e trovato "docker exec -ti contenitore script/dev/null" risolto il problema.

Dopo l'accesso al contenitore con il comando precedente, posso utilizzare lo schermo normalmente.

Riferimento: https://github.com/docker/docker/issues/8755

Problemi correlati