docker attach:为什么我不能从Docker容器中分离出来?

时间:2018-02-23 19:10:02

标签: macos docker docker-compose docker-for-mac

出于某种原因,我在运行docker attach <container>后无法从Docker容器中分离。文档说要使用Ctrl-p, Ctrl-q,但这似乎不起作用。我还尝试了ctrl-q + ctrl-p(组合,而不是顺序)和ctrl-shift-q, ctrl-shift-p以及ctrl-shift-q + ctrl-shift-p。即使设置分离键,例如--detach-keys="p"也不会从容器中分离。

此外,其他事情似乎并没有奏效。例如,根据文档,ctrl-c应该使附加的容器停止和分离。但是,我无法让ctrl-c处理我的任何容器。但是,与ctrl-q不同,ctrl-c按预期呈现反馈,在终端中显示^C

我注意到由于某种原因,当我按下ctrl-p时,我在终端中收到^P,但是按ctrl-qctrl-shift-q会显示终端反馈

任何人都可以猜测为什么会发生这种情况吗?

如果重要的话,我在MacOS上使用iTerm2。此外,有问题的容器是使用docker-compose启动的。

编辑:为清楚起见,我在docker-compose up文件上使用compose启动了我的容器:

version: '3'

services:
  test:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: container-test
    ports:
      - "5050:5050"

然后我附上:

$ docker attach container-test

编辑2:经过一些测试,我可以确认MacOS终端中仍存在此问题。

2 个答案:

答案 0 :(得分:4)

您可以使用--sig-proxy=false来阻止信号传递到容器并使用Ctrl+C分离:

docker attach --sig-proxy=false container-test

这似乎是一个已知问题: https://github.com/docker/for-mac/issues/1598

答案 1 :(得分:0)

我发现通过在我的docker-compose中添加以下行,我可以让它退出并响应输入。

services:
  test:
    // etc...
    stdin_open: true
    tty: true
    // etc...