在我的本地机器上,我已经建立了
latest
映像,并运行另一个
docker build
应该在任何地方使用缓存。
然后我将图像作为
最新的
,然后在我的ci服务器上,
最新的
要将我的应用程序用作生成缓存以生成新版本的图像:
docker pull $CONTAINER_IMAGE:latest
docker build --cache-from $CONTAINER_IMAGE:latest \
--tag $CONTAINER_IMAGE:$CI_COMMIT_SHORT_SHA \
.
从构建输出中我们可以看到
COPY
的
Gemfile
不使用来自
最新的
图像,而我还没有更新该文件:
Step 15/22 : RUN gem install bundler -v 1.17.3 && ln -s /usr/local/lib/ruby/gems/2.2.0/gems/bundler-1.16.0 /usr/local/lib/ruby/gems/2.2.0/gems/bundler-1.16.1
---> Using cache
---> 47a9ad7747c6
Step 16/22 : ENV BUNDLE_GEMFILE=$APP_HOME/Gemfile BUNDLE_JOBS=8
---> Using cache
---> 1124ad337b98
Step 17/22 : WORKDIR $APP_HOME
---> Using cache
---> 9cd742111641
Step 18/22 : COPY Gemfile $APP_HOME/
---> f7ff0ee82ba2
Step 19/22 : COPY Gemfile.lock $APP_HOME/
---> c963b4c4617f
Step 20/22 : RUN bundle install
---> Running in 3d2cdf999972
旁侧节点
:它在我的本地机器上运行良好。
查看Docker文档
Leverage build cache
似乎无法解释这里的行为,因为dockerfile和gemfile都没有改变,所以应该使用缓存。
是什么使Docker不使用GemFile的缓存?
更新
我试图复制设置正确权限的文件,使用
COPY --chown=user:group source dest
但它仍然不使用缓存。
开放的Docker论坛主题:
https://forums.docker.com/t/docker-build-not-using-cache-when-copying-gemfile-while-using-cache-from/69186