簡體   English   中英

無法附加到運行Docker容器的bash

[英]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 + pCtrl + q

然后我們可以停止並重啟容器

$ docker stop test
$ docker start test

現在我們可以附加到同一個bash實例並檢查我們的別名

$ docker attach test
root@3534cbe1e994:/# test
Hello, world!

一切都很完美!

正如我在我的評論中指出的那樣,用例可以在Docker容器中運行一些交互式shell作為bashoctaveipython ,只需重新連接到同一個實例就可以保存所有歷史記錄,導入,變量和臨時設置。

正如您所見,您的容器正在運行,尚未完成

  • 它出現在docker ps ,所以它是一個正在運行的容器
  • 它顯示n秒

你用-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM