docker 附加:为什么我不能从我的 Docker 容器中分离?

docker attach: Why can't I detach from my Docker container?

出于某种原因,我无法在 运行 docker attach <container> 之后与 Docker 个容器分离。文档说要使用 Ctrl-p, Ctrl-q,但这似乎不起作用。我也试过 ctrl-q + ctrl-p(组合,而不是按顺序)和 ctrl-shift-q, ctrl-shift-pctrl-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.

启动的

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

version: '3'

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

然后我附加使用:

$ docker attach container-test

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

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

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

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

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

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