Реестр Docker не будет обновлять изображения - PullRequest
0 голосов
/ 01 июля 2019

Я настроил реестр Docker на удаленной системе.Я поместил некоторые изображения к нему.Я внес изменения в эти изображения и хочу обновить эти изображения, чтобы при получении их я получал самую последнюю версию.Как я могу гарантировать, что я всегда получу самую новую версию?

Я пытался пометить свое изображение: последней, но это, похоже, ничего не дает.Я также позаботился о том, чтобы изображение создавалось заново с флагом --no-cache.

Это то, что я делаю в данный момент:

Я строю изображение с помощью

docker image build --tag karaf .

Я отмечаю это изображение с помощью

docker image tag karaf outserver.at:5000/karaf

Я нажимаю это изображение с помощью

docker push outserver.at:5000/karaf

Я вытягиваю изображение в какой-либо целевой системе с помощью

docker pull outserver.at:5000/karaf

Я запускаюМой файл docker-compose, содержащий эти изображения в качестве сервисов через

docker-compose up

. Я ожидаю, что команда push просто перезапишет существующий образ в реестре новым образом.Логически, если я потяну это изображение в целевой системе, я буду ожидать, что изображение будет обновлено.Но на самом деле изображение, которое я получаю, устарело.

Ответы [ 2 ]

1 голос
/ 01 июля 2019

В большинстве случаев рекомендуется указывать в своих docker run и аналогичных командах: используйте уникальный тег для каждой сборки изображения (например, отметку даты, идентификатор фиксации контроля версий или номер сборки), используйте эту конкретную версию / номер сборки при развертывании и не полагайтесь на такие вещи, как тег latest.

Хитрость в том, что если вы docker run someimage:latest, Docker сначала начинает с просмотра своего локального списка изображений. Если у него уже есть что-то с таким точным именем и тегом, он просто запускает его; если нет, то сначала будет неявно docker pull. Это распространяется и на системы оркестровки более высокого уровня (например, вы должны пойти довольно далеко, чтобы заставить Kubernetes заставить его перезагрузить изображение).

В случае Docker Compose docker-compose up пытается перевести систему в ожидаемое состояние, выполняя минимально необходимую работу. Если вы измените тег в контейнере приложения, docker-compose up удалит и заново создаст этот один контейнер, не касаясь контейнера вашей базы данных. В дополнение к инструкции docker pull, которую вы выполняете, вам может потребоваться docker-compose stop app; docker-compose rm app, чтобы принудительно восстановить один контейнер.

0 голосов
/ 01 июля 2019

Если ваша команда push действительно работает, и вы успешно добавили новый образ в свой реестр, то вытягивание образа в процессе работы сработает, и вы получите более новый образ.

Проверьте (просматривая код возврата), что нажатие прошло успешно (ниже показан Bash):

> docker push outserver.at:5000/karaf
> echo $?

Если вы этого не видите, пожалуйста, покажите нам консольные сообщения для шагов сборки, тега, push и pull.

ВАЖНО:

Обратите внимание, что тег :latest не имеет ничего общего с последним изображением в реестре! Тег - это просто строка, связанная с изображением: в данном случае строка состоит из букв l, a, t, e, s и t, это не обязательно означает, что тег является последним изображением. Тег :latest перезаписывается в 2 случаях:

  1. Вы явно используете тег при нажатии, например, docker push outserver.at:5000/karaf:latest.
  2. Вы вообще не указываете тег, например, docker push outserver.at:5000/karaf.

Если вы вставляете изображение без тега (тем самым перезаписывая тег latest в реестре), а затем нажимаете более новое изображение, но указываете тег, тег :latest не будет перезаписан и будет указывать на первое изображение, а не новое.

Рекомендуется всегда указывать тег изображения: никогда не используйте тег :latest.

...