当前位置: 首页 > 知识库问答 >
问题:

如何防止Dockerfile缓存git克隆

田翰林
2023-03-14

我有一个Dockerfile文件,试图将一个web应用程序打包并部署到一个容器中。在Docker映像构建期间,app的代码从git存储库中获取。以下是Dockerfile快照:

........
RUN git clone --depth=1 git-repository-url $GIT_HOME/
RUN mvn package -Dmaven.test.skip
........

我希望 docker 不要缓存 RUN git 克隆的步骤 --depth=1 git-repository-url $GIT_HOME/ 以便存储库上正在进行的更新可以反映在 Docker 映像构建中。有可能做到这一点吗?

共有3个答案

宿丰
2023-03-14

我自己也遇到了同样的问题,我只是决定在构建映像时使用--no-cache选项,而不是尝试单独使用git repo。

docker build --no-cache -t my_image .
谷梁宁
2023-03-14

问题1996尚不可用,但您有以下解决方法:

FROM foo
ARG CACHE_DATE=2016-01-01
RUN git clone ...

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

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

或者:

ADD http://www.convert-unix-time.com/api?timestamp=now /tmp/bustcache
RUN git pull

这也会使该ADD行之后的缓存无效。

类似的想法:

ARG命令添加到Dockerfile:

# Dockerfile
# add this and below command will run without cache
ARG CACHEBUST=1

当您需要使用选定的缓存重建时,请使用--Build-arg选项运行它

$ docker build -t your-image --build-arg CACHEBUST=$(date +%s) .

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

易成天
2023-03-14

另一个解决方法:

如果您使用GitHub(或者gitlab或bitbucket也很可能),您可以将GitHub API的repo表示添加到虚拟位置。

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缓存无效。

如果您正在处理私有存储库,您可以使用github的x-oauth-Basic身份验证方案和个人访问令牌,如下所示:

ADD https://$ACCESS_TOKEN:x-oauth-basic@api.github.com/repos/$USER/$REPO/git/refs/heads/$BRANCH version.json

(thx @captnolimar获得澄清认证的建议编辑)

 类似资料:
  • 问题内容: 在我中,我使用或下载档案的最新版本,例如: 使用或创建自己的图像层的语句。它将用作以后执行的缓存。 问题 :如何禁用该指令的缓存? 让类似 缓存失效的 东西在那里工作会很棒。例如,通过使用HTTP ETag 或查询 最后修改的 标头字段。这样就可以根据HTTP标头进行快速检查,以决定是否可以使用缓存的层。 我知道一些肮脏的技巧可以帮助例如在语句中执行下载Shell脚本。在我们的构建系统

  • 问题内容: 我已经编写了一个Linux驱动程序,该驱动程序ioremaps将特定设备的PCI BAR0导出为sysfs二进制属性,允许用户空间直接控制它。 当我尝试在属性顶部使用MMAP来直接访问该位内存(从Userland程序)时,问题就浮现了。读取可以很好地完成并返回期望值,尽管当我写入该内存时,它似乎被缓存在内核和内存之间的某个地方,而不是传递给GM​​CH根联合体(以及设备)。我想做的是每

  • 问题内容: 我有一个简单的html: 在test.js中,我更改了Javascript函数,但是我的浏览器正在缓存该文件。如何禁用脚本src的缓存? 问题答案: 将随机查询字符串添加到 您可以通过在每次更改时增加查询字符串来手动执行此操作: 或者,如果您使用服务器端语言,则可以自动生成以下内容: ASP.NET:

  • 问题内容: 我正在使用PHP开发一个简单的网站。 开发配置: WAMP 生产配置: LAMP 在测试时,我更改了CSS文件,但是当我重新加载页面时,我的浏览器(不确定)仍使用旧的缓存CSS。 我进行了一些谷歌搜索,发现了已经尝试过的其他解决方案 在CSS末尾附加查询 使用(在Firefox中)强制获取资源 禁用Firefox缓存以及使用Firefox加载项。 当这些都不起作用时,我做了更多的谷歌搜

  • 问题内容: 所以我正在做这个小项目,但是在捕捉方面有些麻烦。不能正常工作的一件事是,浏览器一直在缓存包含保存数据的json文件,当我在其他地方更新json时,浏览器会返回到已缓存的json文件的旧版本并读取该旧版本。不幸的是我不想要那个。我根本不希望浏览器完全缓存文件,以便每次加载页面时,它将向服务器请求json文件并根据该文件而不是已缓存的任何文件进行操作。但是,我希望能够缓存页面上的所有其他内

  • 我有从我的网页生成的AJAX POST请求,可能有多个POST请求具有相同的POST数据。但是响应可能会有所不同,我希望确保我没有得到这些请求的缓存响应。我需要每个请求点击网页。 我假设对POST请求的响应不会被缓存,这对吗?