2017-06-30 256 views
0

我需要配置在Docker容器中運行的程序。爲了實現該程序必須正在運行(並提供一個開放端口),以便管理程序可以連接到正在運行的進程。不幸的是,沒有簡單的可編輯配置文件,所以這是唯一的方法。 RUN命令顯然不是正確的,因爲在docker轉到下一個命令後它不會提供正在運行的實例。最好的方法是在建造碼頭圖像的時候這樣做,但如果它必須在容器啓動時完成,那麼也可以。但是(據我所知)也沒有簡單的方法可以在啓動時運行多個命令。有沒有人有一個想法如何做到這一點?Docker:在另一個命令運行時運行命令

爲了讓更多的明確的,這裏是從我Dockerfile一個簡單的例子:

# this command should start the application which has to be configured 
RUN /usr/local/server/server.sh 
# I tried this command alternatively because the shell script is blocking 
RUN nohup /usr/local/server/server.sh & 

# this is the command which starts an administration program which connects to the running instance started above 
RUN /usr/local/administration/adm [some configuration parameters...] 

# afterwards the server process can be stopped 

下載包含正確的狀態可能是一個解決方案的完整程序目錄,太。但是,在Dockerfile中配置不能輕易改變,那將會很棒。

回答

0

Dockerfile應該是用於生成圖像的順序指令列表。該圖像應該包含您的應用程序代碼及其所有可安裝的依賴項。

每個RUN指令都作爲自己的容器執行。一旦您運行的命令完成,任何已更改的文件都將作爲新的圖像層提交。

試圖在後臺運行進程會導致您正在運行的命令立即返回。一旦發生這種情況,容器將被視爲停止,並且Dockerfile的下一條指令將在新的單獨容器中執行。

如果您確實需要兩個進程運行,您需要生成一個可以傳遞給單個RUN指令的命令。

+1

謝謝,我現在寫了一個shell腳本並運行它,因爲它只有一個命令。這似乎工作 – UoS