2017-07-03 188 views
3

我正在嘗試使用docker-compose services啓動容器。但不幸的是,container退出了whith代碼0。 容器是由.tar.gz歸檔的存儲庫構建的。這個檔案是一個Centos虛擬機。用代碼0退出docker

我想從同一個存檔中創建6個容器。 而不是鍵入6次docker命令,我想創建一個docker-compose.yml文件,我可以在其中總結他們的命令和標記。

我已經開始編寫docker-compose.yml文件來創建一個容器。

這裏是我的搬運工,compose.yml:

version: '2' 
services: 
    dvpt: 
    image: compose:test.1 
    container_name: cubop1 
    command: mkdir /root/essai/ 
    tty: true 

注意不要到命令正如我剛纔指定一個。

所以我的問題是,爲什麼容器正在退出?是否有另一種解決方案來同時構建這些容器?

感謝您的回覆。

+3

你說不注意命令,但命令在這種情況下非常重要,容器將會在命令執行期間一直存在。 –

回答

7

答案其實是第一條評論。我會稍微解釋Miguel的評論。

首先,我們需要了解Docker容器運行單個命令。只要該命令啓動的進程正在運行,容器就會運行。一旦過程完成並退出,容器將停止。

有了這樣的理解,我們可以假設你的情況正在發生什麼。當您啓動您的dvpt服務時,它將運行命令mkdir /root/essai/。該命令創建該文件夾,然後退出。此時,Docker容器因爲進程退出而停止(狀態爲0,表示mkdir已完成且沒有錯誤)。

+0

-1因爲你還沒有給出一個適當的解決方案,只有一個解釋本身就像在評論。用可能的解決方案更新答案,我會改變主意。 – sensation

+0

這個答案完全合理,準確地描述了這個問題。 mkdir命令立即退出,成功或失敗,導致容器立即退出。解決方案是不要使用mkdir作爲入口點,這可以根據用例以多種方式完成。 – Mike

1

一個解決方案是創建一個不會結束的過程,一個無限循環或可以在後臺連續運行的過程。這將使容器保持打開狀態,因爲該過程不會退出。

雖然這是非常黑客。我仍在尋找更好的解決方案。

Zend服務器映像做了這樣的事情。在他們的.sh腳本中,他們有一個最終的命令:

exec /usr/local/bin/nothing 

它執行一個連續運行在後臺的文件。我試圖在這裏複製文件內容,但它必須是二進制文件。

編輯: 您也可以用/bin/bash結束您的文件,該文件在容器中開始一個新的終端進程並阻止其關閉。