遇到了連接到bash實例並保持容器運行的問題。無法連接到運行Docker容器的bash
要更詳細。我正在運行容器,如下所示:
$ docker run -dt --name test ubuntu bash
現在應該是實際運行,還沒完成。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
f3596c613cfe ubuntu "bash" 4 seconds ago Up 2 seconds test
在此之後,我試圖附加到該容器運行的bash實例。像這樣:
$ docker attach test
運行這個命令我可以寫一些東西給標準輸入,但沒有結果跟在後面。我不確定bash是否正在輸入我輸入的行。
是否有一些其他的方式來打擊,使容器運行?
我知道,我可以運行一個不同的bash實例並使用它docker exec -it test bash
。但更一般的是,有沒有辦法連接到在Docker容器中運行的進程?
有時,保存在容器內運行的進程的會話可能很有用。
SOLUTION
感謝user2915097
爲指出缺少-i
標誌。
所以現在我們可以有持久的bash會話。例如,讓我們設置一些alias
並在停止並重新啓動容器後重新使用。
$ docker run -itd --name test ubuntu bash
要附加到bash
情況下只運行
$ docker attach test
[email protected]:/# alias test="Hello, world!"
從容器分離,而不是停止容器按按Ctrl + p,按Ctrl + q
然後我們可以停止並重啓容器
$ docker stop test
$ docker start test
現在我們可以連接到同一個bash
實例和檢查我們的別名
$ docker attach test
[email protected]:/# test
Hello, world!
一切工作完美!
正如我已經指出了我的評論用例此只需 通過重新連接到相同的運行一些互動殼爲bash
,octave
,ipython
在泊塢容器堅持所有的歷史,進口,變量和臨時設置實例。
感謝,加入'-i'解決我的問題。分離交互式容器的一種可能用例是持久會話。例如。 bash實例具有所有歷史記錄和以前的別名,而不會將這些替換爲.bashrc。實際上,我將嘗試使用這種技術來保持Octave會話,因爲它也是一個交互式shell。 –