2016-11-07 102 views
-1

我正在艱難地嘗試弄清楚這一點。如何在運行碼頭集裝箱時運行CMD並打開Bash?

所以我有一個基於Ubuntu的圖像上的dockerfile。在我dockerfile結束時,我有:

CMD django-admin startproject $PROJECTNAME 

我在以前的文章中,基Ubuntu的圖像具有CMD運行/斌/ bash的,所以我的命令實際上是覆蓋這個(不知道這是告訴有關與否)。

我現在遇到的問題是,如果我運行:

docker run -i -t <containerid> 

沒有任何反應..泊塢窗PS表明沒有容器運行

但是,如果我運行:

docker run -i -t <containerid> /bin/bash 

的容器開始運行,我在shell中,docker ps顯示這個容器正在運行。一切都按預期工作,但我的django項目不在那裏,我的理解是運行/ bin/bash覆蓋了dockerfile中的CMD,這意味着django-admin startproject永遠不會運行。

從容器內部,我可以運行django-admin startproject $ projectname,它創建沒有問題的項目,它告訴我django及其所有依賴關係都已安裝,並且我的環境變量正在註冊。

不過,我仍懷疑有可能是我在我的dockerfile CMD的一個問題,我不知道在哪裏可以從這裏走。

用我提供的dockerfile,如果我不運行帶有/斌/ bash的容器,容器將無法運行。

泊塢窗圖像的輸出:

REPOSITORY   TAG     IMAGE ID   CREATED    SIZE 
<none>    <none>    cbec557d6362  About a minute ago 579 MB 
<none>    <none>    6919c19b159a  16 hours ago 

泊塢窗運行:

docker run -i -t cbec557d6362 
+0

兩個相關的問題,您是否使用Dockerfile構建圖像?你明白[圖像和容器](http://stackoverflow.com/questions/23735149/docker-image-vs-container)之間的區別嗎? – R0MANARMY

+0

是的,這兩個問題。 – david

+0

你可以包括'碼頭圖像'和確切的'碼頭運行'命令的輸出嗎?只是想確認你正在啓動正確的圖像。 – R0MANARMY

回答

2

我評論了原來的問題,但不管是什麼原因,現在有一個新的。當您運行/bin/bash變爲該命令在該容器中運行,即一個bash shell。你可以在容器中做任何你想做的事情(比如創建一個Django項目),但是當你退出shell時,容器仍然會停止(當PID 1進程,在這個例子中爲/bin/bash),容器會停止。

我的懷疑(我不知道Django超級好)是命令django-admin startproject $PROJECTNAME正在運行,成功完成然後退出。它是PID 1,所以容器停止。這就是爲什麼docker ps什麼也沒有顯示。

我的建議是在你的Dockerfile其次是CMD /bin/bash改用RUN django-admin startproject $PROJECTNAME

構建容器然後運行它,你應該是在bash shell,檢查是否建立你的項目。

相關問題