2016-03-17 3 views
5

У меня есть служебная программа, которая зависит от характеристик терминала. Я хочу выполнить его внутри контейнера докера. (программа не является интерактивной программой как таковой. Это старая программа, которая была написана именно так).Docker: выполнить программу, которая требует tty

docker run -i -t или docker exec -i -t следует открыть контейнер tty. Но вот что происходит ..

[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 

Когда опция -t для докер команды (запуск/EXEC) должен дать «телетайп», то терминал команды возвращается с «а не телетайп». Это озадачивает.

Я испытал это на хостах и ​​изображениях openSuse и fedora23, если это имеет значение. Для этого я использовал эмуляторы терминала «guake», MATE (Gnome?) С такими же результатами.

Есть ли какие-либо решения? или это по дизайну и нужно заменить/переписать мою утилиту?

+0

Вы можете разместить 'Эхо $ TERM', когда внутри контейнера? – user2915097

+0

@ user2915097: ваш вопрос заставил меня провести несколько экспериментов. Я ответил на свой вопрос. Благодарю. – yogmk

ответ

0

Я провел несколько экспериментов, и вот выводы. Надеюсь, кто-то найдет их полезными. (команда Докера не является полной, но только кратко)

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

2. docker -d следует docker exec -i -t

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

3. docker -d с последующим docker attach вы привязываться к/разработчику/консоли. Нет подсказки (потому что я использую tail -f xxx.log, чтобы сохранить контейнер в живых). На самом деле мне нужно, чтобы остановить мое приложение от другого терминала (с помощью докера EXEC) и остановить контейнер, чтобы вернуться к командной строке (хост-оболочке)

4. docker start следует docker attach же, как и выше

+0

и какой эмулятор терминала, который я использую, не имеет никакого отношения к этому, – yogmk

1

Я побежал в та же проблема, и обнаружил, что «docker exec -ti container script/dev/null» решил проблему.

После входа в контейнер с приведенной выше инструкцией, я могу нормально использовать экран.

Ссылка: https://github.com/docker/docker/issues/8755

Смежные вопросы