Python在Docker容器中使用vim/vi后终端换行异常如何解决?

Docker 容器里面使用 vim,vi 之后, 终端就无法换行了?即使退出容器也是一样的,这样只能重新断开远程连接。有人遇到这个问题?怎么解决?


Python在Docker容器中使用vim/vi后终端换行异常如何解决?
13 回复

reset 命令


这个问题我遇到过,是终端尺寸信息没有正确同步导致的。Docker容器默认不会把宿主机的终端尺寸变化通知给容器内的进程。

最简单的解决方案是在运行容器时加上 -it 参数,并设置正确的环境变量:

docker run -it --rm \
  -e TERM=xterm-256color \
  -e COLUMNS=$(tput cols) \
  -e LINES=$(tput lines) \
  your-python-image bash

如果容器已经在运行,可以在容器内执行:

stty rows $(tput lines) cols $(tput cols)
export TERM=xterm-256color

对于Docker Compose,在service配置中添加:

environment:
  - TERM=xterm-256color
  - COLUMNS=${COLUMNS}
  - LINES=${LINES}
tty: true
stdin_open: true

核心就是让容器知道当前终端的实际尺寸。

一直以为是 terminal 的 bug,遇到了重新打开 terminal 就好了

调试代码也不是在 docker 里啊

目前没碰到这个问题 vim 从来都不是直接用的 建议你用 k vim server 的配置

你是说在 container 里改文件?为啥不直接挂进去,在外面修改就好啦。

有时候在容器里调试还是需要的,比较蛋疼的是有些镜像非常精简 vim nano 都是不存在的🤣

#6 默认的都没有 vim 的 只有内核 所以直接安装一下 然后下载配置文件。 可能我说的不明白。因为自己的方法没有碰到这样的问题

1. 安装 vim
2. 下载配置文件。
curl https://raw.githubusercontent.com/wklken/vim-for-server/master/vimrc > ~/.vimrc

嗯 我是反对任何生产环境的镜像里面做任何操作的
docker 有 cp 命令可以往正在运行的容器里复制文件,这个基本就够了

#8 这个我同意 生产环境的景象不能乱搞。。log 是需要打出来的

docker run 或者 exec 的时候,加上-i 和-t 参数

可能有时因为情况需要,不方便将容器内文件暴露到外面吧。所以就需要登录到 docker 内部去搞了

stty sane

回到顶部