我正在尝试使用docker attach
附加到基于curses的图形过程:
$ docker run --name irssi -it pandrew/irssi irssi
当您使用它从这个过程中分离^P^Q
并重新附加时,docker attach irssi
它看起来像没有发生任何事情。但是,该过程确实会重新附加,因为您可以键入命令并慢慢地通过触发重绘来构建图形界面备份。然而,重新附加后进程的行为很奇怪。
但是,如果您最初在 a 中运行该进程screen
,则一切正常:
$ docker run --name irssi -it ${PREVIOUS_IMAGE_PLUS_SCREEN} screen irssi
您可以从容器中分离和重新连接,并且有关 screen 的某些内容会导致 irssi 会话表现良好。irssi 似乎有一定的能力检查它是否“脏”,并重绘屏幕:https ://github.com/irssi/irssi/blob/master/src/fe-text/irssi.c#L123 .
谁能帮忙解释这里发生了什么?谢谢你。
当您重新附加到全屏应用时,该应用需要重绘。屏幕擅长确定何时重新连接并重新绘制自身 - 通常通过侦听 SIGWINCH 来指示终端大小已更改。它可能有一些额外的功能来监控它的终端,使它能够在 irssi 没有的地方成功。
根据irssi 提示页面中的最后一条建议,您应该可以输入
/redraw
irssi 来重绘屏幕,或者将其绑定到 ^L with/bind ^L redraw
。