У меня есть докер Dockerfile, в котором я хочу клонировать репозиторий Git. Если репозиторий Git не обновляется, я бы хотел, чтобы Docker использовал его кеш. Если репозиторий обновляется, то при создании образа Docker следует использовать обновления репозитория Git.
На основе этого вопроса stackoverflow:
Как предотвратить кэширование Dockerfile git clone
Я добавил в свой Dockerfile следующее:
#invalidate cache if micropython is updated
ADD https://api.github.com/repos/dwjbosman/micropython/git/refs/heads/master /root/micropython_version.json
RUN git clone --recurse-submodules https://github.com/dwjbosman/micropython.git /root/micropython && \
cd /root/micropython && \
git submodule update
Я использую make-файл с целями для построения образа. Сначала я извлекаю предыдущее изображение из концентратора докеров:
docker pull $(REGISTRY)/$(DOCKER_IMAGE)
, а затем я использую это извлеченное изображение в качестве кэша для новой сборки:
docker build --cache-from $(DOCKER_IMAGE) -t $(DOCKER_IMAGE)
После этого новое изображение помещается вДокер-хаб. Я строю изображения в среде CI (Gitlab). Если я проверяю логи, шаг ADD всегда делает недействительным кеш (и контрольная сумма изменяется), даже если в Git-репо не было никаких обновлений.
Я проверил вывод "https://api.github.com/repos/dwjbosman/micropython/git/refs/heads/master". Содержимоепохоже, не меняется.
Есть ли какое-то скрытое свойство (время может быть?), которое все еще изменяется?