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

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

 docker exec -ti <CONTAINER> /bin/bash 

我可以使用Ctrl + p Ctrl + q来分离这个shell进程。 然后这个shell仍然在容器中运行,但是我怎样才能重新连接到一个特定的shell(由docker exec启动,而不是docker run )呢?

可悲的是,这是不可能的。 在GitHub上看到这个问题 。 我也想要这个function,但目前看起来没有直接的方法来做到这一点。

已经提出了一个解决方法,以处理您通过ssh访问一个盒子并在远程盒子上运行docker exec的情况(或者,在terminal模拟器不稳定并且可能会崩溃的情况下): 始终运行你的docker exec命令在screen或者tmux里面。 如果你这样做,每当你从screen / tmux会话中分离,你可以重新连接到它,仍然可以访问你的docker exec命令。 (这与@ vodolaz095提出的有些不同,因为它涉及在容器外部运行screen或者tmux ,使得它适用于不运行screen / tmux作为其主stream程的容器)

docker exec专门用于在已经启动的容器中运行新的东西,不pipe是shell还是其他进程。

docker attach是为了附加到正在运行的进程,所以你只能使用一个shell的实例。

运行你的容器(进程)

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

然后

 docker attach <CONTAINER> 

要分离Ctrl + p + Ctrl + q

通过这种方式,您可以仅使用一个shell实例连接和分离多次