2016-10-10 101 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 
    " 

这将删除现有的节点模块映射入卷,然后在那些从容器中复制,然后最终启动节点应用程序。每当容器启动时都会发生这种情况。