2015-09-06 105 views
-1

我有這樣的搬運工,撰寫:碼頭工人,組成不運行命令

web: 
    build: ../../ 
    dockerfile: environments/production/Dockerfile 
    links: 
     - fpm:fpm 
     - redis:redis 
     - elasticsearch:elasticsearch 
     - beanstalkd:beanstalkd 
    volumes: 
     - /var/cache/nginx 
     - ../../:/app:ro 
... 
composer: 
    image: imega/composer 
    volumes: 
    - ../../:/data 
    command: ["install"] 
node: 
    image: node:slim 
    volumes: 
    - ../../:/app 
    working_dir: /app 
    entrypoint: npm 
    command: ["install"] 

我們的目標是在建造安裝作曲家和節點DEPS。它應該在理論上工作,但實際上在容器定義中編寫的命令不會執行。任何命令。我試圖在那裏運行'echo',或'ls'。 - 沒有。

任何想法爲什麼?

回答

1

我想你誤會這裏有兩件事情:

  • 您正在運行npm install在體積安裝依賴關係,然後卷是由您的應用程序容器消耗。這不包含應用程序映像中的任何依賴項。雖然這可能起作用,但這意味着圖像並非真正運行。當您將此映像發佈到生產環境時,您打算簽署一份說明「此應用程序與開發版本相同」的合同。注意這一點。
  • 您正在運行npm install作爲最終將退出的服務。當命令退出時,容器停止。更重要的是,web服務(可能取決於這些依賴關係)可能在npm install完成之前開始。

難道你不想讓composer installnpm install作爲應用程序構建過程的一部分嗎?

+0

音量設置爲主機目錄,這是理念 - 服務與主機直接相互作用,直接向主機安裝依賴關係。這就是這個容器如何設計使用:https://hub.docker.com/r/imega/composer/ 問題不在某些服務中,但是傳遞給「command」的ANY命令不起作用。我在那裏寫'ls'。或'回聲嗨' - 沒有輸出。 »»是否有一個原因,你不想讓作曲家安裝和npm安裝作爲你的應用程序構建過程的一部分? - 事實上,我正試圖爲自動部署獲得最佳的工作流程。你認爲有更好的方法? – Terion

+0

早些時候,我已經嘗試了一種方法,當應用程序在主容器(網絡)中生成並測試時,這一切都是在dockerfile中編寫的。這是行得通的,但現在我試圖讓事情變得更加乾燥,更單一的責任,因爲它應該在碼頭工人。我甚至從fpm中分離出了nginx。考慮到這一點,我正在嘗試重新設計工作流程。 – Terion

0

不使用命令:「安裝」]

嘗試:

命令:安裝

+0

nothing changes =( – Terion