我可以附加到一个docker进程但是Ctrl+ c不能从它分离.exit基本上停止了这个过程.
建议的工作流程是什么,让流程运行,偶尔附加到它上进行一些更改,然后分离?
Ken*_*ane 616
要在不退出shell的情况下分离tty,请使用转义序列Ctrl-p Ctrl-q.
更多详情:https: //docs.docker.com/engine/reference/commandline/attach/
来自此来源的其他信息(https://groups.google.com/forum/#!msg/docker-user/nWXAnyLP9-M/kbv-FZpF4rUJ):
^P^Q与docker attach 分离并重新附加^P^Q; 将扰乱stdin^P^Q; 可以SIGKILL客户端; 可以用docker attach重新附加cze*_*asz 168
退房还的--sig-proxy选项:
docker attach --sig-proxy=false 304f5db405ec
然后CTRL+c用来分离
Col*_* Su 90
如果您只想对文件进行一些修改或检查进程,那么这是您可能想要的另一种解决方案.
您可以运行以下命令从现有容器执行新进程:
sudo docker exec -ti [CONTAINER-ID] bash
将使用bash shell启动一个新进程,你可以^c直接从它中逃脱,它不会影响原始进程.
Nan*_*iao 44
我认为这应该取决于具体情况.以下面的容器为例:
# 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
然后再次登录容器,您将看到bashpreavious 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
Zen*_*xer 30
要从正在运行的容器中分离,请使用^P^Q(按住Ctrl,按P,按Q,释放Ctrl).
这里有一个问题:如果容器启动时使用这仅适用既 -t和-i.
如果你有一个没有这些选项中的一个(或两个)而启动的运行容器,并且附加了docker attach,你需要找到另一种分离方法.根据您选择的选项和正在运行的程序^C可能有效,或者它可能会终止整个容器.你必须要做实验.
另一个问题:根据您正在使用的程序,您的终端,shell,SSH客户端或多路复用器可能会拦截^P或^Q(通常是后者).要测试这是否是问题,请尝试运行或附加--detach-keys z参数.您现在应该可以通过按下z而不使用任何修改器来分离.如果这有效,另一个程序正在干扰.解决此问题的最简单方法是使用参数设置自己的分离序列--detach-keys.(例如,要退出^K,请使用--detach-keys 'ctrl-k'.)或者,您可以尝试禁用终端或其他干扰程序中的密钥拦截.例如,stty start ''或者stty start undef可能阻止终端拦截^Q某些POSIX系统,尽管我没有发现这有用.
Adi*_*tol 25
当没有其他工作时,打开一个新终端然后:
$ 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>
小智 10
要从容器中分离,只需按住Ctrl并按P+即可Q.
要附加到正在运行的容器,请使用:
$ docker container attach "container_name"
我有同样的问题,ctrl-P和Q不起作用,也没有ctrl-C ...最终我打开了另一个终端会话,我做了"docker stop containerid "和"docker start containerid ",它完成了工作.奇怪的.
我通常使用 docker Attach 来查看 STDOUT 显示的内容,以对容器进行故障排除。我刚刚发现docker logs --follow 621a4334f97b,它让我可以看到 STDOUT,同时还可以通过 ctrl+c 关闭它而不影响容器操作!这正是我一直想要的。
...自然地,您需要替换为您自己的容器 ID。
我想让容器保持运行,但已附加但未使用 启动容器-it。我的解决方案是牺牲我的 SSH 连接(因为我通过 SSH 连接到运行容器的机器)。终止该 ssh 会话使容器完好无损,但使我与它分离。
| 归档时间: | 
 | 
| 查看次数: | 329233 次 | 
| 最近记录: |