Docker附加到curses进程

我正在尝试使用docker attach附加到基于curses的graphics化进程:

 $ docker run --name irssi -it pandrew/irssi irssi 

当你使用^P^Q从这个进程中分离出来,然后用docker attach irssi重新docker attach irssi ,看起来没有任何事情发生。 但是,该过程会重新连接,因为您可以键入命令,并且可以通过触发重绘来缓慢地构buildgraphics界面。 尽pipe如此,重新join后,这个过程的行为却很奇怪。

但是,如果你最初在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指示terminal大小已经改变。 它可能有一些额外的function来监视它的terminal,它允许它在这里成功,而不是irssi。

基于irssi提示页面中的最后一个build议,你应该能够在irssi中键入/redraw画来重画屏幕,或者通过/bind ^L redraw绑定到^ L。