Docker容器内使用nano/vim后Shell卡顿及窗口异常问题求助
这个问题我在OSX Sierra上用Docker的时候碰到过好多次!本质是终端没有给容器正确分配交互式tty,导致nano、vim这类依赖全屏的编辑器直接罢工,甚至退出后Shell都卡得动不了。给你几个实用的解决办法:
启动容器时直接指定交互式终端参数
这是最彻底的解决方式,运行容器时一定要加上-it参数,它会强制分配一个交互式tty终端,让容器Shell和本地终端建立正确的连接:docker run -it --name my_custom_container my_image /bin/bash如果是已经创建好的容器,启动时也要带上
-i和-t:docker start -i my_custom_container进入运行中的容器用
exec而非attach
要是容器已经在后台跑着,别直接用docker attach(很多时候它不会正确初始化tty),改用exec并加上-it参数:docker exec -it my_custom_container /bin/bash这样进入的Shell就能正常支持编辑器全屏了。
临时救急:恢复卡顿的Shell
如果你已经踩坑了——编辑器退出来后Shell完全没反应、回车键失效,可以试试按Ctrl + Q,这个快捷键能恢复终端的流控制。要是还是不行,直接关掉当前终端窗口,重新用带-it的命令进入容器就行。配置别名,以后少敲参数
为了避免每次都手动加-it,可以在你的Shell配置文件(比如~/.bash_profile或者~/.zshrc)里加个别名:alias docker-enter='docker exec -it $1 /bin/bash'保存后重启终端,之后直接敲
docker-enter my_custom_container就能一键进入带正确tty的容器Shell了。
简单说下原因:OSX的终端和Linux的tty机制存在差异,Docker默认不会自动给容器分配交互式终端,-it参数就是告诉Docker:“这个容器需要和本地终端进行交互式操作,给它分配个能识别尺寸的tty!”这样编辑器就能正常获取终端窗口大小,全屏运行也不会卡顿了。
内容的提问来源于stack exchange,提问作者DimiDak

