Docker build --no-cache обновляет удаленные базовые образы обновлено или нет? Документация вроде не уточняется.
@IlyasDeckers Спасибо, Ильяс, но сейчас я не могу этого сделать по разным причинам. Если вы хотите протестировать и сообщить мне результаты, я проголосую и помечу как ответ.


--no-cache перестраивает образ без использования кеша, так что по сути это чистая сборка.
согласно сборке докера справки --help --no-cache Не использовать кеш при построении изображения
Конечно, но тогда, когда вы перестраиваете локальный образ, он будет использовать СТАРЫЙ кэшированный образ, верно? Потому что предыдущий --no-cache не ВЫТЯНИЛ новый образ, верно?
docker build --no-cache восстановит весь образ без повторного использования кэшированных слоев, но не будет извлекать новейший базовый образ из удаленного репозитория. Он просто будет использовать ваше локальное сохраненное изображение.
Все команды dockerfile, которые мы указываем в файле docker, такие как RUN, CMD, ADD, создают слои в вашей локальной системе, и эти слои будут использоваться другими образами докеров при условии, что они тоже используют ту же команду dockerfile с такими же параметрами.
Когда мы указываем сборку докера с параметром «--no-cache», тогда докер будет игнорировать слои образа докера локальной системы, которые уже были доступны в локальной системе, в которой вы создаете докер, и всегда запускает сборку как новую сборку или с нуля. и счетчик ссылок для предыдущего слоя, если таковой имеется; не будет добавлен при создании этого нового слоя изображения.
Вы можете найти слои изображения по этой ссылке Определение слоев и размеров слоев для каждого образа Docker
Если базовый образ (указанный командой FROM) доступен, и мы запускаем сборку с --no-cache. Тогда будет ли использоваться кэшированный базовый образ или снова будет загружена новая копия?
@variable также необходимо включить --pull. См. Принятый ответ.
Опция --no-cache перестроит образ без использования локальных кэшированных слоев. Однако строка FROM будет повторно использовать уже извлеченный базовый образ, если он существует на хосте сборки (сама строка from может не кэшироваться, но извлекаемый образ есть). Если вы хотите снова загрузить базовый образ, вы можете использовать параметр --pull в команде сборки. Например.
$ docker build --no-cache --pull -t new-image-name:latest .
Чтобы увидеть все параметры, которые принимает команда сборки, вы можете запустить
$ docker build --help
или смотрите документацию на https://docs.docker.com/engine/reference/commandline/build/
Вот пример того, как вы можете проверить это поведение самостоятельно:
$ # very simple Dockerfile
$ cat df.test
FROM busybox:latest
RUN echo hello >test.txt
$ # pull an older version of busybox
$ docker pull busybox:1.29.2
1.29.2: Pulling from library/busybox
8c5a7da1afbc: Pull complete
Digest: sha256:cb63aa0641a885f54de20f61d152187419e8f6b159ed11a251a09d115fdff9bd
Status: Downloaded newer image for busybox:1.29.2
$ # retag that locally as latest
$ docker tag busybox:1.29.2 busybox:latest
$ # run the build, note the image id at the end of each build step
$ DOCKER_BUILDKIT=0 docker build --no-cache -f df.test .
Sending build context to Docker daemon 23.04kB
Step 1/2 : FROM busybox:latest
---> e1ddd7948a1c
Step 2/2 : RUN echo hello >test.txt
---> Running in dba83fef49f9
Removing intermediate container dba83fef49f9
---> 1f824ff05612
Successfully built 1f824ff05612
$ # rerun the build, note step 1 keeps the same id and never pulled a new latest
$ DOCKER_BUILDKIT=0 docker build --no-cache -f df.test .
Sending build context to Docker daemon 23.04kB
Step 1/2 : FROM busybox:latest
---> e1ddd7948a1c
Step 2/2 : RUN echo hello >test.txt
---> Running in 73df884b0f48
Removing intermediate container 73df884b0f48
---> e5870de6c24f
Successfully built e5870de6c24f
$ # run with --pull and see docker update the latest image, new container id from step 1
$ DOCKER_BUILDKIT=0 docker build --no-cache --pull -f df.test .
Sending build context to Docker daemon 23.04kB
Step 1/2 : FROM busybox:latest
latest: Pulling from library/busybox
Digest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812
Status: Downloaded newer image for busybox:latest
---> 59788edf1f3e
Step 2/2 : RUN echo hello >test.txt
---> Running in 7204116ecbf4
Removing intermediate container 7204116ecbf4
---> 2c6d8c48661b
Successfully built 2c6d8c48661b
$ # one last run now that busybox:latest is updated shows the pull has nothing to do
$ DOCKER_BUILDKIT=0 docker build --no-cache --pull -f df.test .
Sending build context to Docker daemon 23.04kB
Step 1/2 : FROM busybox:latest
latest: Pulling from library/busybox
Digest: sha256:2a03a6059f21e150ae84b0973863609494aad70f0a80eaeb64bddd8d92465812
Status: Image is up to date for busybox:latest
---> 59788edf1f3e
Step 2/2 : RUN echo hello >test.txt
---> Running in f37e19024e99
Removing intermediate container f37e19024e99
---> 044a5d4011c4
Successfully built 044a5d4011c4
Я не знаю ответа, но вы легко можете проверить это самостоятельно. Создайте простой базовый образ, отправьте его в репо и используйте в своем файле докеров. Обновите базовый образ и снова создайте файл докеров.