web服务器
技术随笔
Docker 容器里上下左右键变 ^[[A^[[B 乱码的解决办法
在 Docker 容器里执行命令时,想用上下方向键调出历史命令,结果却出现乱码 ^[[A ^[[B ^[[C ^[[D,方向键完全不可用。
一、原因
多数精简镜像默认的 shell 是 sh(如 dash、Alpine 的 ash),而不是 bash。方向键的历史 / 行编辑功能由 bash 的 readline 提供,sh 不解析这些转义序列,于是原样打印成 ^[[A 之类的控制字符。
二、解决办法
1. 临时切换(最常用)
直接在容器内输入:
bash
回车后即进入 bash,上下左右键恢复正常。若提示 bash: not found,说明镜像没装 bash。
2. 给容器换默认 shell(永久)
用 chsh 把登录 shell 改为 /bin/bash;或在 docker run / docker-compose 中显式指定命令:
docker run -it your-image /bin/bash
3. 镜像里安装 bash
# Debian/Ubuntu apt-get update && apt-get install -y bash # Alpine apk add bash
三、WSL 环境
在 WSL / WSL2 里遇到同样问题,同样是默认 shell 不是 bash,输入 bash 即可,或用 chsh -s /bin/bash 设为默认。