2017-08-19 88 views
2

相關的docker run vs create + start:爲什麼創建的容器不同?

docker container started in Detached mode stopped after process execution

https://serverfault.com/questions/661909/the-right-way-to-keep-docker-container-started-when-it-used-for-periodic-tasks

我明白碼頭工人runcreate + start之間的差異,但不明白這兩種方式產生的實際容器的區別。

說我箱子&運行容器

docker run -dit debian:testing-slim 

,然後停止。創建的容器可以稍後以

docker start silly_docker_name 

開始,它將在後臺運行,因爲圖像的入口命令是bash。

但是,當容器首次創建

docker create --name silly_name debian:testing-slim 

,然後用

docker start silly_name 

開始,然後它會立即退出。爲什麼不開始,或在這種情況下它是如何退出的?

回答

0

作爲shell的容器進程的區別(例如debian示例中的bash)是沒有終端+交互式「模式」的shell在沒有任何操作的情況下退出。

您可以通過更改create的命令來測試這倒是容器的東西,不需要終端:

$ docker create --name thedate debian date

現在,如果我跑thedate容器,每次我運行它,它輸出日期(在日誌中)並退出。 docker logs thedate會顯示這個;每次運行一次。

要明確,你的docker run命令具有標誌-ditd etached, nteractive(連接STDIN)和 TY全部啓用。

如果你想有一個類似的方法與創建&開始,那麼你需要分配一個tty所創建的容器:

$ docker create -it --name ashell debian

現在,如果我啓動它,請問連接/交互它我也得到相同的行爲來看:

$ docker start -ai ashell [email protected]:/#

注:[2018年1月25日]編輯添加-icreate作爲一個評論者指出的是,最初寫這個沒有工作,作爲容器的元數據並沒有把標準輸入在創建階段

+0

感謝的人連接。沒有意識到'-t'標誌也可用於'create'。 – basher

+0

-1;這只是簡單的不適合我。如果我執行'docker create -t​​ -name ashell debian'然後'docker start -ai ashell',我確實看到'root @ 6e44e2ae8817:/#',但是shell被掛起了;它不會接受輸入或顯示任何進一步的輸出。如果我用'docker run -dit -name ashell debian'替換'docker create'命令,另一方面,一切正常。對於我來說,這些命令不同的奧祕依然存在,尚未解決。 –

+0

我的錯誤是將命令翻譯成答案;在'create'步驟中'-i'標誌仍然是必需的,以便** stdin **在開始時連接,因爲它存在於爲容器創建的元數據中。我已經編輯了答案,以便現在正確顯示。 –

相關問題