Docker:重新连接到"docker exec"进程

Wir*_*nto 11 docker

如果我docker exec用来点燃一个shell,

docker exec -ti <CONTAINER> /bin/bash
Run Code Online (Sandbox Code Playgroud)

我可以使用Ctrl + p Ctrl + q来分离这个shell进程.然后这个shell仍然在容器内部运行,但是我怎样才能重新连接到那个特定的shell(开头的那个docker exec,不是docker run)?

cod*_*uel 6

可悲的是,这还不可能。在GitHub上看到这个问题。我也想要此功能,但目前看来尚无直接方法。

提出了一种解决方法,以解决您通过远程盒子访问sshdocker exec在其上运行盒子的情况(或者,对于您的终端仿真器不稳定并且可能崩溃的情况):始终在docker exec内部运行命令screentmux如果这样做,无论何时与screen/ tmux会话分离,都可以稍后重新连接到该会话,并且仍然可以docker exec访问命令。(这与@ vodolaz095的建议有所不同,因为它涉及在容器中运行screen或在容器tmux 外部运行,使其适用于不运行容器screen/ tmux作为其主要过程的容器)


Hem*_*ela 5

docker exec 专门用于在已启动的容器中运行新事物,无论是外壳还是其他进程。

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

运行容器(过程)

docker run -tid --name <CONTAINER> <IMAGE>:<TAG> bin/bash
Run Code Online (Sandbox Code Playgroud)

然后

docker attach <CONTAINER>
Run Code Online (Sandbox Code Playgroud)

为了分离Ctrl+ p+ Ctrl+q

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

  • 抱歉,这不是我想要的答案。如上所述,我可以毫无问题地连接到主外壳。但是我想重新连接到我用`docker exec`启动的第二个shell,现在分离了。 (2认同)
  • 我不认为现在有办法做到这一点,因为exec命令不是专门为此设计的。 (2认同)