我可以附加到一个docker进程,但Ctrl+C不能从它分离。退出基本上停止了进程。
让流程运行,偶尔附加到流程上进行一些更改,然后再分离的推荐工作流是什么?
我可以附加到一个docker进程,但Ctrl+C不能从它分离。退出基本上停止了进程。
让流程运行,偶尔附加到流程上进行一些更改,然后再分离的推荐工作流是什么?
当前回答
对于任何遇到与我相同问题的人(不能在不杀死容器的情况下分离,即使在设置分离键时)......
当使用docker-compose up -d启动容器时
而不是使用docker附加{容器名}来查看尾矿日志....
Ctrl+C在不杀死容器的情况下杀死日志尾部
{服务名}是在docker-compose中列出的服务。yml文件. .(例如,当容器名称=elk_logstash_1 ->服务名称=logstash
其他回答
要在不退出shell的情况下分离tty,请使用转义序列Ctrl+P后跟Ctrl+Q。详情请点击这里。
来自此来源的其他信息:
docker run -t -i→可以用^P^ q分离,用docker attach重新连接 docker run -i→不能与^P^Q分离;将中断stdin docker run→不能与^P^Q分离;可以SIGKILL客户端;可以用docker attach重新连接吗
还可以查看——sig-proxy选项:
docker attach --sig-proxy=false 304f5db405ec
然后使用Ctrl+C分离
如果您只是想对文件进行一些修改或检查进程,这里有另一个您可能需要的解决方案。
您可以运行以下命令从现有容器中执行一个新进程:
sudo docker exec -ti [CONTAINER-ID] bash
用bash shell启动一个新进程,你可以直接用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
当没有其他工作,打开一个新的终端然后:
$ ps aux | grep attach
username <pid_here> .............. 0:00 docker attach <CONTAINER_HASH_HERE>
username <another_pid> .............. 0:00 grep --color=auto attach
$ kill -9 <pid_here>