我可以附加到一个docker进程,但Ctrl+C不能从它分离。退出基本上停止了进程。
让流程运行,偶尔附加到流程上进行一些更改,然后再分离的推荐工作流是什么?
我可以附加到一个docker进程,但Ctrl+C不能从它分离。退出基本上停止了进程。
让流程运行,偶尔附加到流程上进行一些更改,然后再分离的推荐工作流是什么?
当前回答
我认为这要视情况而定。以以下容器为例:
# docker run -it -d ubuntu
91262536f7c9a3060641448120bda7af5ca812b0beb8f3c9fe72811a61db07fc
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 5 seconds ago Up 4 seconds serene_goldstine
(1)使用“docker attach”贴装集装箱:
因为“docker attach”不会分配一个新的tty,而是重用原来运行的tty,所以如果你执行exit命令,它会导致正在运行的容器退出:
# docker attach 91262536f7c9
exit
exit
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
91262536f7c9 ubuntu "/bin/bash" 39 minutes ago Exited (0) 3 seconds ago serene_goldstine
所以除非你真的想让正在运行的容器退出,你应该使用Ctrl+P + Ctrl+Q。
(2)使用“docker exec”
由于“docker exec”将分配一个新的tty,所以我认为你应该使用exit而不是Ctrl+P + Ctrl+Q。
执行Ctrl+P + Ctrl+Q退出容器:
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss 04:03 0:00 bash
root 28 0.0 0.0 15564 1148 ? R+ 04:03 0:00 ps -aux
root@91262536f7c9:/# echo $$
15
然后再次登录容器,你会看到bash进程在之前的docker exec命令中仍然活跃(PID为15):
# docker exec -it 91262536f7c9 bash
root@91262536f7c9:/# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18160 1908 ? Ss+ 04:03 0:00 /bin/bash
root 15 0.0 0.0 18164 1892 ? Ss+ 04:03 0:00 bash
root 29 0.0 0.0 18164 1888 ? Ss 04:04 0:00 bash
root 42 0.0 0.0 15564 1148 ? R+ 04:04 0:00 ps -aux
root@91262536f7c9:/# echo $$
29
其他回答
如果你只需要docker进程在后台运行,你可以使用
Ctrl + Z
注意,这不是一个真正的分离,它会带来性能损失。 (您可以使用bg命令将其返回到前台)。
另一种选择是关闭你的终端,如果你不再需要它。
打开一个新终端 找到正在运行的容器Id docker ps 删除容器的docker
更新
我通常使用docker attach来查看STDOUT显示的内容,以便对容器进行故障排除。我刚刚发现码头日志-遵循621a4334f97b,这让我看到STDOUT,同时也能够ctrl+c关闭它,而不影响容器操作!这正是我一直想要的。
... 当然,你需要替换你自己的容器ID。
原来的答案
我想让容器运行,但是没有使用-it启动容器。我的解决方案是牺牲我的SSH连接(因为我被SSHed到运行容器的机器上)。关闭ssh会话使容器完好无损,但使我脱离了它。
要从容器中分离,只需按住Ctrl并按P + Q。
附加到你使用的正在运行的容器:
$ docker container attach "container_name"
我有同样的问题,Ctrl+P和Q不能工作,也不是Ctrl+C…最终,我打开了另一个终端会话,我做了“docker stop containerid”和“docker start containerid”,它完成了工作。奇怪。