【发布时间】:2015-06-29 09:51:54
【问题描述】:
我在 CircleCI 上运行 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 复制文件。有时它工作,有时没有。找到解决方案后告诉我。
-
COPY 之前的步骤被 docker 缓存,因为它实际上只在 RUN
之后对字符串进行哈希处理