2016-09-09 23 views
2

我和泊塢窗新手,我想使這裏開始是的NodeJS我的問題..不能FINDE模塊「表達」(與泊塢窗節點應用程序)

我有這個Dockerfile我的項目中:

FROM node:argon 

# Create app directory 
RUN mkdir -p /home/Documents/node-app 
WORKDIR /home/Documents/node-app 

# Install app dependencies 
COPY package.json /home/Documents/node-app 
RUN npm install 

# Bundle app source 
COPY . /home/Documents/node-app 

EXPOSE 8080 
CMD ["npm", "start"] 

當我運行docker run -d -p 49160:8080 node-container一個容器,它工作正常..

但是當我嘗試到我的主機項目,容器目錄(docker run -p 49160:8080 -v ~/Documentos/nodeApp:/home/Documents/node-app node-cont)地圖這是行不通的。

我得到的錯誤是:Error: Cannot find module 'express'

我已經與相關的問題,但沒有其他解決方案試圖似乎爲我工作(或我知道..我只是太新秀本)

謝謝!

+0

我有這個問題,我做了'npm install --save express'並重建:'docker build -t .'它工作正常,希望這有幫助。 – camou

回答

0

當您運行與-v標誌,這意味着安裝從您的碼頭工人發動機的主機目錄放入容器的容器,將覆蓋在/家庭/文檔/節點應用做什麼,如NPM安裝。

因此,您無法在容器中看到node_modules目錄

$泊塢窗運行-d -P --name網絡-v/src目錄/ Web應用程序:/ webapp的培訓/ webapp的蟒蛇app.py

此命令會將主機目錄,/ src目錄/ Web應用程序,爲容器在/ webapp。如果路徑/ web應用程序已經存在於容器的映像中,那麼/ src/webapp掛載會覆蓋但不會刪除預先存在的內容。一旦掛載被刪除,內容可以再次訪問。這與mount命令的預期行爲一致。

mount a host directory as a data volume。作爲文檔說什麼,主機目錄的預先存在的內容將不會被刪除,但沒有關於這是怎麼回事容器的存在目錄信息。

有一個例子支持我的意見。

  1. Dockerfile

    FROM alpine:latest WORKDIR /usr/src/app COPY . .

  2. 我創建了一個test.t文件中Dockerfile的同一目錄下。

  3. 證明

    1. 運行命令docker build -t test-1 .
    2. 運行命令docker run --name test-c-1 -it test-1 /bin/sh,那麼你的容器會打開慶典。
    3. 在你的容器bash中運行命令ls -l,它會顯示test.t文件。
    4. 只需使用相同的圖像。
    5. 運行命令docker run --name test-c-2 -v /home:/usr/src/app -it test-1 /bin/sh。您無法在您的test-c-2容器中找到test.t文件。

這all.I希望它會幫助你。