Я пытаюсь использовать docker attach
для присоединения к графическому процессу на основе curses:
$ docker run --name irssi -it pandrew/irssi irssi
Когда вы отключаетесь от этого процесса, используя ^P^Q
и снова подключите с помощью docker attach irssi
похоже, ничего не произошло. Но процесс действительно подключается, потому что вы можете вводить команды и постепенно вы можете создать резервную копию графического интерфейса, запустив перерисовку. Тем не менее, поведение процесса после переподключения странное.
Однако, если вы изначально запускаете процесс внутри screen
, все нормально работает:
$ docker run --name irssi -it ${PREVIOUS_IMAGE_PLUS_SCREEN} screen irssi
Вы можете отсоединить и снова присоединиться к контейнеру, и что-то в экране заставляет сеанс irssi работать нормально. Похоже, что у irssi есть возможность проверить, не "грязный" ли он, и перерисовать экран: https://github.com/irssi/irssi/blob/master/src/fe-text/irssi.c#L123.
Может ли кто-нибудь помочь объяснить, что здесь происходит? Спасибо.
Когда вы повторно подключаетесь к полноэкранному приложению, это приложение необходимо перерисовать. Экран хорош для определения момента повторного подключения и повторного рисования - обычно путем прослушивания SIGWINCH, который указывает, что размер терминала изменился. У него могут быть некоторые дополнительные функции для мониторинга своего терминала, которые позволят ему добиться успеха здесь, а irssi - нет.
На основании последнего предложения в страница советов irssi, вы должны уметь вводить /redraw
в irssi, чтобы перерисовать экран, или привязать его к ^ L с помощью /bind ^L redraw
.