我有一个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 clone --depth=1 git-repository-url $GIT_HOME/的步骤,这样存储库上正在进行的更新就可以反映在Docker镜像构建上。有可能实现这一目标吗?
发布于 2016-09-02 02:07:14
另一种解决方法:
如果您使用GitHub (或者gitlab或bitbucket ),您可以将存储库的GitHub应用程序接口表示添加到一个虚拟位置。
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 token的github's x-oauth-basic authentication scheme,如下所示:
ADD https://$ACCESS_TOKEN:x-oauth-basic@api.github.com/repos/$USER/$REPO/git/refs/heads/$BRANCH version.json(thx @captnolimar用于建议的编辑,以澄清身份验证)
发布于 2016-05-03 13:16:33
Issue 1996尚不可用,但您已拥有following workaround
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这也将在此添加行之后使高速缓存无效。
Similar idea
添加
ARG命令到您的Dockerfile文件:Dockerfile#添加这个和下面的命令将运行没有缓存参数CACHEBUST=1当您需要重建与选定的缓存,运行它与--build-arg选项
$ docker build -t your-image --build-arg CACHEBUST=$(日期+%s)。
然后只重建Dockerfile中ARG命令下面的图层。
发布于 2018-09-08 06:05:01
我自己也遇到了同样的问题,我只是决定在构建镜像时使用--no-cache选项,而不是试图挑选git代码库。
docker build --no-cache -t my_image .https://stackoverflow.com/questions/36996046
复制相似问题