在Docker 1.1.2(最新版本)中,从容器中分离而不停止容器的正确方法是什么?
例如,如果我试着:
Docker运行-i -t foo /bin/bash或 Docker附加foo(用于已经运行的容器)
两者都把我带到集装箱中的一个终端,我如何在不停止它的情况下退出集装箱的终端?
exit和CTR+C都停止容器。
在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'