2016-10-10 104 views
1

有簡單的Node.js搬運工容器泊塢窗鏈接體積

泊塢窗,compose.yml的覆蓋內容

FROM node:6.7-slim 

COPY package.json /tmp 
RUN cd /tmp && npm install 

RUN mkdir -p /usr/app 
WORKDIR /usr/app 

CMD ["node", "./src/app.js"] 

我想達到什麼是容器我有package.json和已安裝的節點模塊(npm install)。我在容器中複製package.json和安裝模塊的部分非常直接,但是當我想要在鏈接的應用程序中使用這些node_modules時會出現問題。我找不到任何方法,如何將/ tmp/node_modules複製到/ usr/app/node_modules

有沒有Docker的方法可以做到這一點?如果沒有,我可以告訴我的節點應用程序在除根目錄以外的其他地方查找node_modules嗎?

+0

使用一個卷https://docs.docker.com/engine/tutorials/dockervolumes/或'docker cp' https://docker.github.io/engine/reference/commandline/cp/或在您的Dockerfile中複製在我誤解的情況下 – user2915097

+0

/usr/app通過卷鏈接,但是當我啓動容器時發生這種情況。然後我需要docker用來自/ tmp/node_modules – Schovi

+0

的內容覆蓋/ usr/app/[email protected]的答案,儘管我仍然試圖理解爲什麼如果您的容器始終具有更新的容器,那麼您將安裝node_modules?其他容器也使用它? – Griffin

回答

0

東西,幫我在下面Dockerfile卷

volumes: 
    - ${APP_PATH}:/usr/app 
    # Empty node_modules directory 
    - /usr/app/node_modules 

的使用率則:

FROM node 

# Node modules 
COPY *.json /tmp/ 
RUN cd /tmp && yarn 
ENV NODE_PATH /tmp/node_modules:${NODE_PATH} 

# App 
RUN mkdir -p /usr/app 
WORKDIR /usr/app 
ENV NODE_ENV docker 

CMD ["run-node", "src/app.js"] 

這讓我有在另一個目錄和應用node_modules會找過來的。

1

您可以通過在Dockerfile或docker-compose.yml文件中更改啓動容器時使用的CMD來達到目的。

而不是剛剛開始node ./src/app.js,你想要做的兩件事情:在node_modules超過

  1. 複製。
  2. 開始節點

使用docker-compose.yml,我會做到以下幾點:

app: 
    build: ./dockerfiles/app 
    volumes: 
    - /Users/home/work/app:/usr/app 
command: > 
    bash -c " 

    rm -rf /usr/app/node_modules 
    && cp -R /tmp/node_modules /usr/app/node_modules 
    && node ./src/app.js 
    " 

這將刪除現有的節點模塊映射入卷,然後在那些從容器中複製,然後最終啓動節點應用程序。每當容器啓動時都會發生這種情況。