Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Docker没有';t缓存npm安装_Node.js_Caching_Docker_Npm - Fatal编程技术网

Node.js Docker没有';t缓存npm安装

Node.js Docker没有';t缓存npm安装,node.js,caching,docker,npm,Node.js,Caching,Docker,Npm,我似乎无法将dockerfile缓存设置为npm安装。我像所有示例指定的那样设置了它,package.json没有改变,但它仍然下载所有依赖项 这是我的 FROM mf/nodebox # Maintainer MAINTAINER Raif Harik <reharik@gmail.com> RUN rm /bin/sh && ln -s /bin/bash /bin/sh ADD /app/package.json /tmp/package.json RUN

我似乎无法将dockerfile缓存设置为npm安装。我像所有示例指定的那样设置了它,package.json没有改变,但它仍然下载所有依赖项

这是我的

FROM mf/nodebox

# Maintainer
MAINTAINER Raif Harik <reharik@gmail.com>

RUN rm /bin/sh && ln -s /bin/bash /bin/sh

ADD /app/package.json /tmp/package.json
RUN cd /tmp && npm install && npm install -g babel
RUN cd /tmp && cp -a /tmp/node_modules /opt/app/current/node_modules

# Entrypoint to docker shell
ENTRYPOINT ["docker-shell"]

#this is the flag that tells the docker-shell what mode to execute
# Startup commands
CMD ["-r"]

# set WORKDIR
WORKDIR /opt/app/current

# Add shell script for starting container
ADD ./docker-shell.sh /usr/bin/docker-shell
RUN chmod +x /usr/bin/docker-shell

COPY /app /opt/app/current
来自mf/nodebox的

#维护者
维护者Raif Harik
运行rm/bin/sh&&ln-s/bin/bash/bin/sh
添加/app/package.json/tmp/package.json
运行cd/tmp和npm安装和npm安装-g babel
运行cd/tmp&&cp-a/tmp/node_模块/opt/app/current/node_模块
#docker外壳入口点
入口点[“docker shell”]
#这是告诉docker shell要执行的模式的标志
#启动命令
CMD[“-r”]
#设定工作温度
WORKDIR/opt/app/current
#添加用于启动容器的shell脚本
添加./docker-shell.sh/usr/bin/docker-shell
运行chmod+x/usr/bin/docker shell
复制/app/opt/app/current
然后我得到的输出是

Building domain...
Step 0 : FROM mf/nodebox
 ---> 4ee7c51a410d
Step 1 : MAINTAINER Raif Harik <reharik@gmail.com>
 ---> Using cache
 ---> 78d0db67240c
Step 2 : RUN rm /bin/sh && ln -s /bin/bash /bin/sh
 ---> Using cache
 ---> d7d360d8f89a
Step 3 : ADD /app/package.json /tmp/package.json
 ---> 5b373dae5141
Removing intermediate container f037272f49c3
Step 4 : RUN cd /tmp && npm install && npm install -g babel
 ---> Running in cb89bb6fc2d0
npm WARN package.json MF_Domain@0.0.1 No description
正在构建域。。。
步骤0:从mf/节点盒
--->4ee7c51a410d
步骤1:维护人员Raif Harik
--->使用缓存
--->78d0db67240c
步骤2:运行rm/bin/sh&&ln-s/bin/bash/bin/sh
--->使用缓存
--->d7d360d8f89a
步骤3:添加/app/package.json/tmp/package.json
--->5b373dae5141
拆卸中间容器f037272f49c3
步骤4:运行cd/tmp&&npm安装&npm安装-g babel
--->在cb89bb6fc2d0中运行
npm WARN package.json MF_Domain@0.0.1没有描述
因此,它正在缓存前两个命令,但它会在步骤3中停止ADD package.json,然后转到npm进行步骤4

编辑:

我想我应该提到的是,当我在代码中部署一个新的更改时(或者在我尝试这个问题时,使用的是相同的代码),而package.json保持不变,它会复制到deploy文件夹。我不知道docker是否检查createddate、校验和,或者是否进行了区分。如果是createddate,那么这可能就是问题所在。

添加
复制
指令的情况下,将检查放入图像中的文件的内容。具体来说,对文件进行校验和,然后在缓存查找期间使用该校验和。如果文件中有任何更改,包括其元数据,则缓存无效

这些元数据包括文件修改时间

有一些技巧可以绕过这一点(例如)

另请参见Docker github项目上的