[英]Can't attach to bash running the Docker container
連接到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
運行此命令我可以寫一些東西到stdin,但沒有結果跟隨。 我不確定bash是否正在輸入我輸入的行。
還有其他一些方法來阻止容器運行嗎?
我知道,我可以運行不同的bash實例並使用它docker exec -it test bash
。 但是更一般的是,有沒有辦法連接到在Docker容器中運行的進程?
有時,保存在容器內運行的進程的會話會很有用。
感謝user2915097
指出丟失的-i
標志。
所以現在我們可以進行持久的bash會話。 例如,讓我們設置一些alias
並在停止並重新啟動容器后重用。
$ docker run -itd --name test ubuntu bash
要附加到bash
實例,只需運行即可
$ docker attach test
root@3534cbe1e994:/# alias test="Hello, world!"
要從容器中分離而不是停止容器,請按Ctrl + p , Ctrl + q
然后我們可以停止並重啟容器
$ docker stop test
$ docker start test
現在我們可以附加到同一個bash
實例並檢查我們的別名
$ docker attach test
root@3534cbe1e994:/# test
Hello, world!
一切都很完美!
正如我在我的評論中指出的那樣,用例可以在Docker容器中運行一些交互式shell作為bash
, octave
, ipython
,只需重新連接到同一個實例就可以保存所有歷史記錄,導入,變量和臨時設置。
正如您所見,您的容器正在運行,尚未完成
docker ps
,所以它是一個正在運行的容器 你用-dt
啟動它就可以了
分離(對於d)分配tty(對於t)
但不是交互式的,因為你不添加-i
通常,你幾乎總是提供-it
在一起,它可能是-idt
看到這個帖子
我何時在Docker容器中使用`--interactive`而不使用`--tty`?
如你想要bash,我認為你應該添加-i
我不知道你為什么使用-d
通常是
docker run -it --rm --name=mytest ubuntu bash
你可以測試一下
容器的運行生命周期由其根進程決定,在您的示例中為bash。 當你用bash作為進程啟動你的ubuntu容器時,bash會立即退出,因為它沒有任何東西可以讓它繼續運行。 這就是為什么容器會立即退出並且無需附加任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.