2

在我發佈任何配置之前,我嘗試解釋我想要存檔的內容並希望提及,我是docker的新手。構建一個可以執行npm任務的web應用程序

爲了讓路徑對話更容易,讓我們假設我們談論項目「Docker me up!」它位於「X:\ docker-projects \ docker-me-up \」中。

目標:

我想不同的內容運行多個nginx的項目,每個項目都代表一個專門的編譯。在開發期間[docker-compose up -d]容器應該立即更新;這工作正常。

這個棘手的部分是,我想從主機直接將npm [http://gruntjs.com]]外包到容器/圖像中,這樣我就可以通過安裝docker來進行調試和開發,無論我在哪裏。因此,npm必須安裝在「服務」中,並且需要初始化觀察者。

每個項目都封裝在Docker主機/內部版本的自己的文件夾中,除了本身,不應該有其他任何知識。

我的解決辦法:

我已經嘗試了許多不同的版本,以「volumes_from」等等,但我決定向你展示這一點,因爲它的精縮,但仍然完整。

多克爾 - compose.yml

version: '2' 
services: 
    web: 
     image: nginx 
     volumes: 
      - ./assets:/website/assets:ro 
      - ./config:/website/config:ro 
      - ./www:/website/www:ro 
     links: 
      - php 
    php: 
     image: php:fpm 
     ports: 
      - "9000:9000" 
     volumes: 
      - ./assets:/website/assets:ro 
      - ./config:/website/config:ro 
      - ./www:/website/www:ro 
    app: 
     build: . 
     volumes: 
      - ./assets:/website/assets 
      - ./config:/website/config:ro 
      - ./www:/website/www 

Dockerfile

FROM debian:jessie-slim 
RUN apt-get update && apt-get install -y \ 
    npm 

RUN gem update --system 
RUN npm install -g grunt-cli grunt-contrib-watch grunt-babel babel-preset-es2015 

RUN mkdir -p /website/{assets,assets/es6,config,www,www/js,www/css} 

VOLUME /website 

WORKDIR /website 

問題:

正如你所看到的,「數據」服務包含NPM和應能夠執行一個npm命令。但是,如果我運行「docker-compose up -d」,一切正常。我可以編輯頁面內容,使用它等。但是數據容器沒有運行,因此無法執行任何npm命令。除非我有一個巨大的邏輯錯誤;這是完全可能的;-)

環境:

  • 視窗10臨[up2date的]
  • 爲搬運工共用驅動器用於
  • 多克爾版本1.12.3,構建6b644ec
  • docker-machine version 0.8.2,build e18a919
  • docker-compose version 1.8。1,建立004ddae

回答

1

你打電話docker-compose up後,你可以得到一個交互的shell爲您與app容器:

docker-compose run app [command] 

docker-compose run app 

您也可以運行一次性命令

docker-compose up完成後,您的app容器未運行的原因是您的Dockerfile未定義服務。對於app到作爲服務運行,則需要通過增加像保持線程運行在容器中的前景:

CMD ./run-my-service 

您Dockerfile結束。

相關問題