在Docker 1.1.2(最新版本)中,从容器中分离而不停止容器的正确方法是什么?

例如,如果我试着:

Docker运行-i -t foo /bin/bash或 Docker附加foo(用于已经运行的容器)

两者都把我带到集装箱中的一个终端,我如何在不停止它的情况下退出集装箱的终端?

exit和CTR+C都停止容器。


当前回答

你可以通过发送SEGKILL来杀死docker cli进程。如果容器以

Docker运行- some/container

你可以得到它的pid

Ps -aux | grep docker

user   1234  0.3  0.6 1357948 54684 pts/2   Sl+  15:09   0:00 docker run -it some/container

假设它是1234,你可以用它“分离”

杀死-9 1234

这是一个hack,但它的工作!

其他回答

尝试按CTRL+P,CTRL+Q将交互模式转换为守护模式。

如果这不起作用,你通过docker attach附加,你可以通过杀死docker attach进程来分离。

更好的方法是使用sig-proxy参数来避免将CTRL+C传递给容器:

docker attach --sig-proxy=false [container-name]

同样的选项可用于docker run命令。

按Ctrl+p,然后按Ctrl+q。它将帮助您将交互模式转换为守护进程模式。

见https://docs.docker.com/engine/reference/commandline/cli/ # default-key-sequence-to-detach-from-containers:

一旦附加到容器,用户就可以使用using CTRL-p CTRL-q键序列从容器中分离并让它运行。这个分离键序列可以使用detachKeys属性自定义。[…]

如果你只想看到容器中运行的进程的输出,你可以做一个简单的docker container logs -f <容器id>。

使用-f标志可以实时跟踪和更新容器的输出。对于调试或监视非常有用。

当你运行docker attach时,你可以使用——detach-keys选项来覆盖默认的CTRL+P, CTRL+ Q序列(这并不总是有效)。

例如,当你运行docker attach——detach-keys=" CTRL - A " test并按下CTRL+A时,你将退出容器,而不会杀死它。

其他的例子:

docker attach——detach-keys=" CTRL - A,x" test -按CTRL+A,然后x退出 docker attach——detach-keys="a,b,c" test -按a,然后按b,然后按c退出

官方文件摘录:

如果你愿意,你可以为分离配置一个覆盖Docker密钥序列。如果Docker默认序列与用于其他应用程序的密钥序列冲突,这是有用的。有两种方法定义自己的分离键序列,作为每个容器的覆盖或作为整个配置上的配置属性。

要覆盖单个容器的序列,使用docker attach命令——detach-keys="<sequence>"标志。<序列>的格式可以是字母[a- z],也可以是ctrl-和以下任意组合:

a-z(一个小写字母) @(@号) [(左括号) \(两个反斜杠) _(下划线) ^(脱字符号)

这些a、ctrl-a、X或ctrl-\\值都是有效键序列的示例。若要为所有容器配置不同的配置默认密钥序列,请参阅配置文件部分。

注意:从docker版本1.10+开始工作(在回答这个问题时,当前版本是18.03)

如果你在windows上使用docker,你可以使用组合'CTRL + D'