我可以附加到一个docker进程,但Ctrl+C不能从它分离。退出基本上停止了进程。
让流程运行,偶尔附加到流程上进行一些更改,然后再分离的推荐工作流是什么?
我可以附加到一个docker进程,但Ctrl+C不能从它分离。退出基本上停止了进程。
让流程运行,偶尔附加到流程上进行一些更改,然后再分离的推荐工作流是什么?
当前回答
要从容器中分离,只需按住Ctrl并按P + Q。
附加到你使用的正在运行的容器:
$ docker container attach "container_name"
其他回答
我发现关于附加和分离的文档有点复杂。
我尝试了不同的选项来启动一个容器并从另一个终端连接到它。下表总结了结果:
其列含义如下:
-d -是docker run -d是否使用的选项 ——sig-proxy -是选项docker attach——sig-proxy=true|false used to not ——no-stdin -是docker attach[——no-stdin]用于not的选项 键- docker是否发送输入键到容器化的应用程序 ^C -当用户按Ctrl+C时会发生什么 ^P ^Q -当用户按下Ctrl+P Ctrl+Q时会发生什么
有一些发现:
attachment behavior doesn't depend on -d option but from -i and -t you can consider attach columns either a connection to a container from another terminal (e.g. docker attach --sig-proxy=false and you may vary connection options) or from the current terminal (but you can't vary connection options; --sig-proxy=true) detachment depends on running options and can be done in three ways: docker run [-i|-t] and connect from another terminal by docker attach --sig-proxy=false CONT -> press Ctrl+C docker run -it and connect from another terminal by docker attach -> press Ctrl+P Ctrl+Q docker run -it and connect from another terminal by docker attach --no-stdin -> press Ctrl+C
(当然,您应该为命令提供其他必要的参数,如容器名称或图像)
附注:我用-i和-t尝试了不同的场景(只有一个),但没有得到行为上的差异。我看到@ken-cochrane提供了以下内容:
docker run -i→不能与^P^Q分离;将中断stdin
但我没有成功地复制这个。
还可以查看——sig-proxy选项:
docker attach --sig-proxy=false 304f5db405ec
然后使用Ctrl+C分离
如果您只是想对文件进行一些修改或检查进程,这里有另一个您可能需要的解决方案。
您可以运行以下命令从现有容器中执行一个新进程:
sudo docker exec -ti [CONTAINER-ID] bash
用bash shell启动一个新进程,你可以直接用Ctrl+C退出,这不会影响原来的进程。
如果你只需要docker进程在后台运行,你可以使用
Ctrl + Z
注意,这不是一个真正的分离,它会带来性能损失。 (您可以使用bg命令将其返回到前台)。
另一种选择是关闭你的终端,如果你不再需要它。
对于任何遇到与我相同问题的人(不能在不杀死容器的情况下分离,即使在设置分离键时)......
当使用docker-compose up -d启动容器时
而不是使用docker附加{容器名}来查看尾矿日志....
Ctrl+C在不杀死容器的情况下杀死日志尾部
{服务名}是在docker-compose中列出的服务。yml文件. .(例如,当容器名称=elk_logstash_1 ->服务名称=logstash