2016-01-28 48 views
7

如果我使用docker exec火了一個外殼,泊塢窗:重新連接到'搬運工exec`過程

docker exec -ti <CONTAINER> /bin/bash 

我可以使用Ctrl + P鍵CTRL + Q脫離這個shell進程。然後這個shell仍然在容器內部運行,但是如何重新連接到一個特定的shell(由docker exec開始的那個,而不是docker run)?

回答

1

docker exec專門用於在已啓動的容器中運行新事物,無論是殼還是其他進程。

docker attach用於附加到正在運行的進程,因此您只能使用一個shell實例。

運行您的容器(進程)

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

然後

docker attach <CONTAINER> 

要取下按Ctrl + p + 按Ctrl + q

在這樣喲你可以連接和分離多次只有一個殼體的實例

+1

你也可以使用諸如'tmux'或'screen'之類的工具並在容器內部運行它們 – vodolaz095

+2

對不起,這不是我正在尋找的答案。如上所述,我可以毫無問題地連接到主外殼。但我想重新連接到我用'docker exec'啓動的第二個shell,現在已經分離了。 –

+2

我不認爲現在有辦法做到這一點,因爲'exec'命令不是爲那個設計的 –

3

不幸的是,這是不可能的;見this issue on GitHub。我也想要這個功能,但目前看起來沒有直接的方法來做到這一點。

已經提出了一種解決方法,以處理您通過ssh訪問盒子並在遠程盒子上運行docker exec的情況(或者,如果終端仿真器不穩定並且可能會崩潰) :Always run your docker exec commands inside screen or tmux.如果您這樣做,無論何時您從screen/tmux會話中分離出來,都可以稍後重新連接,並且仍然可以訪問docker exec命令。 (這比什麼suggested by @vodolaz095有點不同,因爲它涉及到運行screentmux容器,使之適用於容器中使用不運行screen/tmux作爲自己的主要流程)