Ctrl-p 和 Ctrl-n 在 Docker 下行为异常



对于我的生活,我似乎无法弄清楚为什么ctrl-pctrl-n在我一直使用的Docker映像下不能像它们应该的那样工作。ctrl-p 应该像向上箭头一样工作,但我通常必须按两次才能获得我运行的最后一个命令。它以一种看似随机的方式在历史中循环。

也许有人可以帮助我理解这一点。

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。但是,如果我Ctrl-p,则不会在第一时间出现任何内容。当我再次按下它时,ls神奇地出现。

有人可以帮我理解这些吗?我离不开 Ctrl-pCtrl-n

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

编辑:看起来他们在配置文件文档中引用了以下内容。

从 docker 容器分离的命令序列是 ctrl-p ctrl-q,这就是 ctrl-p 无法按预期工作的原因。当你按ctrl-p时,docker正在等待ctrl-q,所以什么也没发生。

您可以使用新的 --detach-keys 参数来docker run将此序列覆盖为 ctrl-p 以外的其他内容:

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 因为我在文档中找不到它了。

最新更新