2017-10-13 160 views
0

我遇到了一個關於我的Dockerfile的問題 - 我有一個包含Web應用程序的容器。當然,當我啓動容器時,Web應用程序啓動,並通過將我的入口點設置爲'/ sbin/init',我可以讓容器永遠運行(如在它不會啓動和關閉)。DOCKER:在Docker運行後在容器中執行一次性命令

現在,問題是,我需要做一些NFS安裝後'容器啓動第一次'

我明白我可以刪除入口點和利用CMD傳中讓說CMD ./my_create_mount_script.sh

但後來,我如何確保我的容器將繼續運行,就像當時我正在使用ENTRYPOINT/sbin/init?

例如,

如果Dockerfile我的第二個最後一行是: CMD ./my_create_mount_script.sh(腳本里面只是一些安裝報表)和我的最後一行是:入口點/ sbin目錄/的init就我所知,它不會對我有任何好處,因爲在這種情況下,ENTRYPOINT期待CMD通過它的參數,沒有別的。

^如果它很重要,我會部署這個容器AWS ECS

回答

1

你可以傳遞多個CMD參數,如:

CMD /sbin/init ; /do_something_else 

或者你可以創建一個腳本,做你想要的,包括Web應用程序的開始,然後傳遞到您的入口點

+0

是CMD例如你給似乎不工作 - 它似乎只執行次要部分(AFTE分號)。另外,如果我創建一個簡單的.sh文件,並在其中放入/ sbin/init並嘗試將該文件傳遞給ENTRYPOINT,則/ sbin/init(或者只是init)不會被執行。 –

+0

@AliKhan看看這個:https://docs.docker.com/engine/admin/multi-service_container/和這個:http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/ – Sergiu

+0

謝謝。您提供的鏈接非常有幫助,我能夠清除我的誤解。至於我的用例,我最終使用supervisord作爲進程#2啓動web應用程序,並且我想以進程#1運行腳本。 –

相關問題