首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止Dockerfile缓存git克隆

如何防止Dockerfile缓存git克隆
EN

Stack Overflow用户
提问于 2016-05-03 13:11:23
回答 7查看 17.9K关注 0票数 60

我有一个Dockerfile,试图打包web应用程序并将其部署到容器中。在Docker镜像构建过程中,app的代码从git仓库中获取。下面是Dockerfile的快照:

代码语言:javascript
复制
........
RUN git clone --depth=1 git-repository-url $GIT_HOME/
RUN mvn package -Dmaven.test.skip
........

我希望docker不要缓存RUN git clone --depth=1 git-repository-url $GIT_HOME/的步骤,这样存储库上正在进行的更新就可以反映在Docker镜像构建上。有可能实现这一目标吗?

EN

回答 7

Stack Overflow用户

发布于 2016-09-02 02:07:14

另一种解决方法:

如果您使用GitHub (或者gitlab或bitbucket ),您可以将存储库的GitHub应用程序接口表示添加到一个虚拟位置。

代码语言:javascript
复制
ADD https://api.github.com/repos/$USER/$REPO/git/refs/heads/$BRANCH version.json
RUN git clone -b $BRANCH https://github.com/$USER/$REPO.git $GIT_HOME/

当头部改变时,API调用将返回不同的结果,从而使docker缓存无效。

如果您正在处理私有repos,您可以使用带有personal access tokengithub's x-oauth-basic authentication scheme,如下所示:

代码语言:javascript
复制
ADD https://$ACCESS_TOKEN:x-oauth-basic@api.github.com/repos/$USER/$REPO/git/refs/heads/$BRANCH version.json

(thx @captnolimar用于建议的编辑,以澄清身份验证)

票数 65
EN

Stack Overflow用户

发布于 2016-05-03 13:16:33

Issue 1996尚不可用,但您已拥有following workaround

代码语言:javascript
复制
FROM foo
ARG CACHE_DATE=2016-01-01
RUN git clone ...

docker build --build-arg CACHE_DATE=$(date) ....

这将使每次构建的ARG CACHE_DATE行之后的缓存无效。

或者:

代码语言:javascript
复制
ADD http://www.convert-unix-time.com/api?timestamp=now /tmp/bustcache
RUN git pull

这也将在此添加行之后使高速缓存无效。

Similar idea

添加ARG命令到您的Dockerfile文件:Dockerfile#添加这个和下面的命令将运行没有缓存参数CACHEBUST=1当您需要重建与选定的缓存,运行它与--build-arg选项

$ docker build -t your-image --build-arg CACHEBUST=$(日期+%s)。

然后只重建Dockerfile中ARG命令下面的图层。

票数 16
EN

Stack Overflow用户

发布于 2018-09-08 06:05:01

我自己也遇到了同样的问题,我只是决定在构建镜像时使用--no-cache选项,而不是试图挑选git代码库。

代码语言:javascript
复制
docker build --no-cache -t my_image .
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36996046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档