在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现在将交互模式转变为守护模式。
好吧,Ctrl+C(或Ctrl+\)应该从容器分离,但它会杀死容器,因为你的主进程是一个bash。
关于docker的一个小教训。 容器并不是一个真正的全功能操作系统。当你运行一个容器时,你启动的进程取PID 1并假设init功率。因此,当该进程终止时,守护进程将停止容器,直到启动一个新进程(通过docker start)(关于此事的更多解释http://phusion.github.io/baseimage-docker/#intro)
如果你想要一个容器一直以分离模式运行,我建议你使用
docker run -d foo
使用容器上的ssh服务器。(最简单的方法是使用dockerizing openssh教程https://docs.docker.com/engine/examples/running_ssh_service/)
或者你可以通过
docker start foo
(默认情况下会被分离)
其他回答
你可以通过发送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现在将交互模式转变为守护模式。
好吧,Ctrl+C(或Ctrl+\)应该从容器分离,但它会杀死容器,因为你的主进程是一个bash。
关于docker的一个小教训。 容器并不是一个真正的全功能操作系统。当你运行一个容器时,你启动的进程取PID 1并假设init功率。因此,当该进程终止时,守护进程将停止容器,直到启动一个新进程(通过docker start)(关于此事的更多解释http://phusion.github.io/baseimage-docker/#intro)
如果你想要一个容器一直以分离模式运行,我建议你使用
docker run -d foo
使用容器上的ssh服务器。(最简单的方法是使用dockerizing openssh教程https://docs.docker.com/engine/examples/running_ssh_service/)
或者你可以通过
docker start foo
(默认情况下会被分离)
旧帖子,但只是退出,然后重新开始…问题是,如果你是在windows机器上,Ctrl p或Ctrl p绑定打印…退出启动容器应该不会造成任何伤害
尝试按CTRL+P,CTRL+Q将交互模式转换为守护模式。
如果这不起作用,你通过docker attach附加,你可以通过杀死docker attach进程来分离。
更好的方法是使用sig-proxy参数来避免将CTRL+C传递给容器:
docker attach --sig-proxy=false [container-name]
同样的选项可用于docker run命令。
如果你只想看到容器中运行的进程的输出,你可以做一个简单的docker container logs -f <容器id>。
使用-f标志可以实时跟踪和更新容器的输出。对于调试或监视非常有用。