我正在運行docker CircleCI,而且我在緩存COPY命令時遇到問題。Circle CI Docker服務不會緩存COPY
Circle CI文檔提及known caching issues並建議使用this perl script來設置複製的文件上的時間戳以保留緩存。
在ADD和COPY指令的情況下, 文件(一個或多個)的內容被放入圖像進行檢查。具體來說,對文件執行 校驗和,然後在緩存查找過程中使用 期間的校驗和。
根據CircleCi的建議,我將緩存保存到磁盤,然後在下次測試運行時再次加載。這看起來像COPY緩存正確之前的命令一樣。
調試時,我輸出文件的md5校驗和,我試圖在本地複製,然後從docker容器中將其正確匹配。所以,理論上緩存應該加載。我不確定Docker使用md5作爲校驗和。
這是我目前circle.yml:
機: 服務: - 泊塢窗
dependencies:
cache_directories:
- "~/docker"
pre:
- mkdir -p ~/docker
override:
- docker info
- if [[ -e ~/docker/image.tar ]]; then docker load -i ~/docker/image.tar; fi
- docker images
- docker build -t circles .
checkout:
post:
- ls -l
- ./timestamp-set-to-git.pl
- ls -l
test:
override:
- md5sum .bowerrc
- docker run circles md5sum .bowerrc
- docker save circles > ~/docker/image.tar
這是做什麼用的校驗步驟生成輸出:
$md5sum .bowerrc
8d1a712721d735bd41bf738cae3226a2 .bowerrc
$docker run circles md5sum .bowerrc
8d1a712721d735bd41bf738cae3226a2 .bowerrc
但docker build
報告此問題:
Step 6 : RUN sudo npm install -g phantomjs gulp
---> Using cache
---> a7bbf2b17977
Step 7 : COPY .bowerrc /var/work/.bowerrc
---> 7ad82336de64
有誰知道爲什麼COPY沒有緩存?
嗨Rimian,我遇到了同樣的問題並尋找解決方案。當我構建我的Docker容器時,我想使用COPY命令從容器內的GIT repro複製文件。有時候它有效,有時不會。當你找到解決方案時讓我知道。 – skroll
COPY之前的步驟由docker緩存,因爲它實際上只在RUN後對該字符串執行散列 –