我可以附加到一个docker进程,但Ctrl+C不能从它分离。退出基本上停止了进程。

让流程运行,偶尔附加到流程上进行一些更改,然后再分离的推荐工作流是什么?


当前回答

还可以查看——sig-proxy选项:

docker attach --sig-proxy=false 304f5db405ec

然后使用Ctrl+C分离

其他回答

如果您只是想对文件进行一些修改或检查进程,这里有另一个您可能需要的解决方案。

您可以运行以下命令从现有容器中执行一个新进程:

sudo docker exec -ti [CONTAINER-ID] bash

用bash shell启动一个新进程,你可以直接用Ctrl+C退出,这不会影响原来的进程。

在同一个shell中,按住Ctrl键,然后按P键和Q键

要从正在运行的容器中分离,请使用^P^Q(按住Ctrl,按P,按Q,释放Ctrl)。

这里有一个问题:这只在容器同时以-t和-i开始时才有效。

如果你有一个正在运行的容器,启动时没有这些选项中的一个(或两个),并且你使用docker attach附加,你需要找到另一种方法来分离。^C可以工作,也可以杀死整个容器,这取决于你选择的选项和正在运行的程序。你得自己试验一下。

Another catch: Depending on the programs you're using, your terminal, shell, SSH client, or multiplexer could be intercepting either ^P or ^Q (usually the latter). To test whether this is the issue, try running or attaching with the --detach-keys z argument. You should now be able to detach by pressing z, without any modifiers. If this works, another program is interfering. The easiest way to work around this is to set your own detach sequence using the --detach-keys argument. (For example, to exit with ^K, use --detach-keys 'ctrl-k'.) Alternatively, you can attempt to disable interception of the keys in your terminal or other interfering program. For example, stty start '' or stty start undef may prevent the terminal from intercepting ^Q on some POSIX systems, though I haven't found this to be helpful.

当没有其他工作,打开一个新的终端然后:

$ 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>

还可以查看——sig-proxy选项:

docker attach --sig-proxy=false 304f5db405ec

然后使用Ctrl+C分离