How to prevent Dockerfile caching git clone
Another workaround:
If you use GitHub (or gitlab or bitbucket too most likely) you can ADD the GitHub API's representation of your repo to a dummy location.
ADD https://api.github.com/repos/$USER/$REPO/git/refs/heads/$BRANCH version.jsonRUN git clone -b $BRANCH https://github.com/$USER/$REPO.git $GIT_HOME/
The API call will return different results when the head changes, invalidating the docker cache.
If you're dealing with private repos you can use github's x-oauth-basic
authentication scheme with a personal access token like so:
ADD https://$ACCESS_TOKEN:x-oauth-basic@api.github.com/repos/$USER/$REPO/git/refs/heads/$BRANCH version.json
(thx @captnolimar for a suggested edit to clarify authentication)
Issue 1996 is not yet available, but you have the following workaround:
FROM fooARG CACHE_DATE=2016-01-01RUN git clone ...docker build --build-arg CACHE_DATE=$(date) ....
That would invalidate cache after the ARG CACHE_DATE
line for every build.
Or:
ADD http://www.convert-unix-time.com/api?timestamp=now /tmp/bustcacheRUN git pull
That would also invalidate cache after this ADD line.
Add
ARG
command to your Dockerfile:# Dockerfile# add this and below command will run without cacheARG CACHEBUST=1
When you need to rebuild with selected cache, run it with
--build-arg
option$ docker build -t your-image --build-arg CACHEBUST=$(date +%s) .
then only layer below
ARG
command in Dockerfile will rebuild.
I ran into this same issue myself, and I just decided to use the --no-cache
option when I build the image, rather than trying to single out the git repo.
docker build --no-cache -t my_image .