添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

docker attach 可以连接上 Docker 容器的标准输入,输出和错误输出。比如 docker attach 连接后就能显示容器中用 ENTRYPOINT/CMD 启动进程的输出内容内容。想要断开会话连接怎么做呢? ctrl - c , 控制台是不再显示了,可以容器也被终止了,显然这是一个危险的操作。

ctrl - c 不仅仅关闭了 docker attach 本身,因为它的默认参数 --sig-proxy true ,所以 SIGKILL 信号同时传递到了 ENTRYPOINT/CMD 的 PID 1 的进程,所以形成了双杀的效果。我们来试一下

如果是在生产环境下,用 docker attach 连接下控制台看下输出,然后不小心像终止 tail -f 命令一样用 ctrl - c 退出,结果服务断了。所以更为小心的操作还是用 docker logs docker attach 的优势只是在于能查看实时的控制台输出。

不想关闭容器的话,千万不要用 ctrl - c , 那么有什么办法只断开 docker attach 而不退出容器呢?

一:关闭执行 docker attach 终端窗口

是不是太土了,这样做只会影响到 docker attach 进程本身,如果 docker attach 连接的是远端的  docker 容器,关闭电脑都行。只要不像对应 docker 容器发送终止信号

二:杀死 docker attach 对应的进程

这需要两个终端窗口(或者 tmux) 来配合, docker attach 后,开一个新的窗口找到 docker attach 进程,然后 kill 它。这种操作实质上与关闭 docker attach 所在窗口是一样的。

三: --sig-proxy=false ,直接 ctrl + c

也两种方式也许会令人觉得不太正经的方式,那么用 docker attach --sig-proxy=false 连接会话后,再用 ctrl - c 终止 docker attach 就显得优雅许多了

docker attach --sig-proxy 参数默认为 true ,就是对 docker attach 发送的信号会代理给容器内的 PS 1 进程。 --sig-proxy=false 就不会转发该信号给容器内的进程了。

四:只用 -t 启动的容器也能  ctrl - c

如果启动容器时只用了 -t 参数,不能有 -i , docker attach 后直接 ctrl - c 退出会话也不会关闭相应的容器。因为 docker attach 连接 -t 启动的容器禁用了它的标准输入,所以也接收不到 SIGKILL 信号。下面还有话说

五: -it 的容器可用 ctrl-p, ctrl-q 退出 docker attach

这个要求有点高,都使用了 -i -t 来启动容器,对于 docker attach 的需求就不那么的高,除非多个终端同时监控  docker 容器中的会话。所以 ctrl-p, ctrl-q 的操作方式也需要在另一个窗口中进行

在下面的窗口按下 ctrl-p, ctrl-q 后显示 read escape sequence 只退出 docker attach 进程而不影响 docker 容器。

docker attach 还能用 --detach-keys 重定义断开会话的快捷键,用以替换标准的 ctrl-p, ctrl-q --no-stdin 不让 docker attach 连接标准输入,但却阻挡不了 ctrl - c 结束 docker attach 时同时消灭了相应的容器。

小结一下,断开 docker attach 会话而不关闭 docker 容器的方法主要有

  • 暴力杀死 docker attach 进程,关它的运行窗口或 kill docker attach 进程
  • docker run -t ... 启动的容器可用 ctrl - c 断开 docker attache 会话
  • docker attach --sig-proxy=false 连接的会话也可用 ctrl - c 断开(强烈选择它是因为不必理会容器是怎么启动的)
  • docker run -it ... 启动的容器可用预置的 ctrl - p, ctrl - q 断开会话
  • 链接: docker attach

    本文链接 https://yanbin.blog/docker-attach-deattach-without-exit-container/ , 来自 隔叶黄莺 Yanbin Blog

    [版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

    最新评论

    友情链接