在Docker下,Ctrl-p和Ctrl-n意外的行为

对于我的生活,我似乎无法弄清楚为什么CTRLPCTRLN不工作,就像他们应该在我一直在使用的Docker镜像下工作。 CTRLP应该像向上箭头一样工作但我通常不得不按两次才能得到我跑过的最后一个命令。 它在历史中循环似乎是随机的。

也许有人可以帮助我对此有所了解。

docker run -it buildpack-deps:trusty # run a Linux based image root@74cbcf321fae:/# ls bin boot dev etc home lib lib64 ... root@74cbcf321fae:/# touch hello 

如果我按这里,它应该显示touch命令,其次是ls 。 如果我按Ctrlp然而,第一次没有出现。 当我再次按下时, ls神奇地出现。

有人能帮我理解这些吗? 我不能没有CtrlpCtrln的生活

它看起来像已经被删除(或移动)在文档中,但它曾经住在这里: https : //docs.docker.com/engine/reference/commandline/attach/

编辑 :它看起来像他们参考下面的配置文件文档。

从docker容器中分离的命令序列是ctrlp ctrlq ,这就是为什么ctrlp不能正常工作的原因。 当你点击ctrl -p时 ,docker正在等待ctrl -q ,所以没有任何反应。

你可以使用新的--detach-keys参数docker run覆盖这个序列是不同于ctrlp

 docker run -ti --detach-keys="ctrl-@" ubuntu:14.04 bash $# ls $# <--- Ctrl-P here will display ls now $# <--- Ctrl-@ here will detach from the running container 

如果你愿意的话,你可以把它添加到你的~/.docker/config.json文件中以保持这个改变:

 { ... "detachKeys": "ctrl-@", ... } 

关于这方面的更多细节可以在这里找到: https : //github.com/docker/docker/pull/15666,因为我不能再在文档中找到它。