如果我使用docker exec
来启动一个Shell,
docker exec -ti <CONTAINER> /bin/bash
我可以使用 Ctrl+p Ctrl+q 分离此 shell 进程。那么这个 shell 仍然在容器内运行,但是如何重新附加到那个特定的 shell(由 docker exec
启动的那个,而不是 docker run
)?
如果我使用docker exec
来启动一个Shell,
docker exec -ti <CONTAINER> /bin/bash
我可以使用 Ctrl+p Ctrl+q 分离此 shell 进程。那么这个 shell 仍然在容器内运行,但是如何重新附加到那个特定的 shell(由 docker exec
启动的那个,而不是 docker run
)?
screen
或tmux
内部运行您的docker exec
命令。如果这样做,每当您从screen
/tmux
会话中分离时,您可以稍后重新连接到该会话,并仍然可以访问您的docker exec
命令。 (这与@vodolaz095建议的有所不同,因为它涉及在容器外部运行screen
或tmux
,使其适用于不运行screen
/tmux
作为其主要进程的容器)。docker exec
是用于在已启动的容器中运行新内容,可以是 shell 或其他进程。
docker attach
用于附加到正在运行的进程,因此您只能使用一个 shell 实例。
运行您的容器(进程)
docker run -tid --name <CONTAINER> <IMAGE>:<TAG> bin/bash
那么
docker attach <CONTAINER>
使用 Ctrl+p + Ctrl+q 进行分离
这样,您就可以使用一个 shell 实例多次附加和分离
tmux
或screen
这样的工具,在容器内运行它们。 - vodolaz095docker exec
启动并现在已分离的第二个shell。 - Wirawan Purwantoexec
命令并不是为此而设计的。 - Hemerson Varelatmux
。您可以重新连接到之前的“bash会话”(您还可以将bash屏幕拆分为多个面板和选项卡)。 然而,这并没有回答你的问题!..因为你问的是如何重新附加到先前的进程(而不是启动一个新进程来插入到以前的shell会话中)。 - Auzias