2017-05-03 52 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

相關問題