17

我一直在尝试node_modules在 Docker 构建上进行缓存。我尝试了几种方法,包括这里的一种,但没有成功。

我缓存的主要原因是因为构建我的图像需要30 多分钟,这太多了。

我的Dockerfile

# This image will be based on the oficial nodejs docker image
FROM node:4.2.1

RUN npm install -g jspm@0.17.0-beta.7 && \
    npm install -g gulp && \
    npm install -g tsd

# Use changes to package.json to force Docker not to use the cache
# when we change our application's nodejs dependencies:
ADD package.json /src/package.json
RUN cd /src && npm install

# Put all our code inside that directory that lives in the container
ADD . /src

# Set in what directory commands will run
WORKDIR /src

# Install dependencies
RUN cd /src && \
    tsd reinstall -so && \
    jspm install && \
    gulp build -p

# Tell Docker we are going to use this port
EXPOSE 3000

# The command to run our app when the container is run
CMD ["npm", "run", "start-production"]

我没有.dockerignore文件。我之前添加了一个,但它仍然没有缓存我的node_modules.

那么,如何缓存我的 node_modules?随意提出修改建议Dockerfile

谢谢!

4

1 回答 1

5

我不确定它是否是错误的根源,但尝试在ADD命令中指定目标文件夹而不是目标文件

ADD package.json /src

此外,您可以使用COPY而不是ADDADD可以与 url 和档案一起使用,但您在这里不需要它)。

您还可以在文件的前面指定您的工作目录。

试试这个代码:

    # This image will be based on the official nodejs docker image
    FROM node:4.2.1
    
    RUN npm install -g jspm@0.17.0-beta.7 && \
        npm install -g gulp && \
        npm install -g tsd

    # Set in what directory commands will run
    WORKDIR /src
    
    # Use changes to package.json to force Docker not to use the cache
    # when we change our application’s nodejs dependencies:
    COPY package.json ./

    RUN npm install
    
    # Put all our code inside that directory that lives in the container
    COPY . ./
    
    # Install dependencies
    RUN tsd reinstall -so && \
        jspm install && \
        gulp build -p
    
    # Tell Docker we are going to use this port
    EXPOSE 3000
    
    # The command to run our app when the container is run
    CMD ["npm", "run", "start-production"]
于 2016-02-25T02:29:08.030 回答