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实例连接和分离多次