Docker: 重新附加到`docker exec`进程

17

如果我使用docker exec来启动一个Shell,

docker exec -ti <CONTAINER> /bin/bash

我可以使用 Ctrl+p Ctrl+q 分离此 shell 进程。那么这个 shell 仍然在容器内运行,但是如何重新附加到那个特定的 shell(由 docker exec 启动的那个,而不是 docker run)?

2个回答

8
很遗憾,目前还无法实现;请参见GitHub上的此问题。我也想要这个功能,但目前似乎没有直接的方法来实现它。
提出了一个解决方法,以解决通过ssh访问盒子并在远程盒子上运行docker exec的情况(或者对于终端仿真器不稳定且可能崩溃的情况):始终在screentmux内部运行您的docker exec命令。如果这样做,每当您从screen/tmux会话中分离时,您可以稍后重新连接到该会话,并仍然可以访问您的docker exec命令。 (这与@vodolaz095建议的有所不同,因为它涉及在容器外部运行screentmux,使其适用于不运行screen/tmux作为其主要进程的容器)。

6

docker exec 是用于在已启动的容器中运行新内容,可以是 shell 或其他进程。

docker attach 用于附加到正在运行的进程,因此您只能使用一个 shell 实例。

运行您的容器(进程)

docker run -tid --name <CONTAINER> <IMAGE>:<TAG> bin/bash

那么

docker attach <CONTAINER>

使用 Ctrl+p + Ctrl+q 进行分离

这样,您就可以使用一个 shell 实例多次附加和分离


1
也可以使用诸如 tmuxscreen 这样的工具,在容器内运行它们。 - vodolaz095
4
抱歉,这不是我正在寻找的答案。像上面描述的那样,我可以轻松地附加到主shell,但我想重新附加到使用docker exec启动并现在已分离的第二个shell。 - Wirawan Purwanto
2
我认为现在没有办法做到这一点,因为exec命令并不是为此而设计的。 - Hemerson Varela
1
如@vodolaz095所建议,如果我是你,我会使用tmux。您可以重新连接到之前的“bash会话”(您还可以将bash屏幕拆分为多个面板和选项卡)。 然而,这并没有回答你的问题!..因为你问的是如何重新附加到先前的进程(而不是启动一个新进程来插入到以前的shell会话中)。 - Auzias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接