2017-05-03 57 views
-1

以下是我为我Dockerfile:复制特定文件第一和副本都在Dockerfile

FROM node:4.6.0 

WORKDIR /src 

COPY node_modules/ /src/node_modules 

COPY . /src/ 

CMD ["/bin/bash"] 

我想让它高效,使得节点模块被复制只有在用户目录中的任何改变。否则,我只想将源文件复制到图像中。 这是否按预期工作?

+3

*“这会按预期工作吗?” - - 你试过了吗? – axiac

+0

当然我尝试过,但是我无法判断node_modules是复制一次,两次还是一次。我的问题是这种方法的效率。 –

+0

构建映像时,Dockerfile中的命令仅执行一次。我不会担心他们的效率。无论如何,我认为你的命令复制'node_directory'两次。如果您希望Docker映像中的“node_modules”内容始终保持最新,则不应将其复制到映像中。使用['VOLUME'](https://docs.docker.com/engine/reference/builder/#volume)和['-v'](https://docs.docker.com/engine/reference/commandline)/run /#mount-volume -v ---只读)命令行选项,用于在每次运行时将主机目录映射到映像的'/ src/node_modules'目录。 – axiac

回答

0

这将复制两次。 Docker缓存查看当前命令和上一层。如果当前命令的Docker上下文中发生了某些变化,它将运行。它不使用部分缓存来运行。

+0

感谢您的评论。有什么方法可以保证只复制'node_modules'一次?我现在所能想到的是在'.dockerignore'文件中列出'node_modules',但我想知道是否有其他选择。 –

+0

保证的唯一方法是复制node_modules,然后手动复制其他所有内容而不是COPY。/src/ 因此,您将拥有目录中所有内容的单独COPY命令,并首先运行COPY for node_modules。它更冗长,并创建更多图层。但它是唯一确保node_modules只复制一次的唯一方法。 – mattsp1290

相关问题