在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都停止容器。
当前回答
从交互式容器分离的默认方法是Ctrl+P Ctrl+Q,但是当运行新容器或使用——detach-keys标志附加到现有容器时,可以覆盖它。
其他回答
按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属性自定义。[…]
你可以通过发送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,但它的工作!
我认为Ashwin的答案是最正确的,我以前的答案如下。 我想在这里添加另一个选项,即如下所示运行容器
docker run -dti foo bash
然后可以进入容器并运行bash
docker exec -ti ID_of_foo bash
不需要安装sshd:)
如果你使用“docker attach”container id,你就进入了容器。 要在不停止容器的情况下退出容器,需要输入Ctrl+P+Q
尝试按CTRL+P,CTRL+Q将交互模式转换为守护模式。
如果这不起作用,你通过docker attach附加,你可以通过杀死docker attach进程来分离。
更好的方法是使用sig-proxy参数来避免将CTRL+C传递给容器:
docker attach --sig-proxy=false [container-name]
同样的选项可用于docker run命令。