Возможно, вы используете тег latest
для устранения неоднозначности версий изображений, но это не работает должным образом.
Когда вы docker run ... ${IMAGE}:latest
на своем хосте, если тег существует локально, любое изображение имеет тег, будет запущено. Возможно, что GCR :latest
обновляется, но вы не используете его, когда запускаете то, что ваш хост имеет как :latest
.
. Теги - это некорректный механизм для идентификации изображений контейнера. Тэги обычно используются для обозначения версий | выпусков, но на самом деле они являются произвольными метками и не дают практически никаких гарантий.
Вам гораздо лучше использовать дайджесты, поскольку они уникальны (для уникальных изображений)
gcloud builds submit \
--tag=gcr.io/${PROJECT}/test \
--project=${PROJECT}
...
latest: digest:
sha256:e5773d45cc5dce21d78f276f87928ab47373b65ef10786722a38b22918e69d7e size: 524
DONE
gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST TAGS TIMESTAMP
e5773d45cc5d latest 2020-02-06T17:21:27
Если мы снова отправим сборку, тег :latest
перейдет к новому изображению:
gcloud builds submit \
--tag=gcr.io/${PROJECT}/test \
--project=${PROJECT}
...
latest: digest:
sha256:ab9fc60674a0e854e553baa06666c898426baec9d8d2ead0ff8513dbab960d2c size: 524
DONE
gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST TAGS TIMESTAMP
ab9fc60674a0 latest 2020-02-06T17:23:48
e5773d45cc5d 2020-02-06T17:21:27
Вы можете запустить контейнер из указанного c дайджеста изображения таким образом:
docker run \
--rm --interactive --tty \
gcr.io/${PROJECT}/test@sha256:e5773d45cc5dce21d78f276f87928ab47373b65ef10786722a38b22918e69d7e
docker run \
--rm --interactive --tty \
gcr.io/${PROJECT}/test@sha256:ab9fc60674a0e854e553baa06666c898426baec9d8d2ead0ff8513dbab960d2c
Альтернативный подход, который зависит от того, используете ли вы отдельные теги (и не так хорош, как использование дайджестов с практически гарантированным выделением):
gcloud builds submit --tag=gcr.io/${PROJECT}/test:v3 --project=${PROJECT}
gcloud builds submit --tag=gcr.io/${PROJECT}/test:v4 --project=${PROJECT}
gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST TAGS TIMESTAMP
5946f2e093af v4 2020-02-06T17:28:36
f03c9609c101 v3 2020-02-06T17:28:17
ab9fc60674a0 latest 2020-02-06T17:23:48
e5773d45cc5d 2020-02-06T17:21:27
NB Поскольку мы были осмотрительны, у нас есть разные дайджесты для разных тегов. Однако, если бы мы случайно использовали повторно v4
, различные копии изображения снова были бы несовместимы:
Давайте потянем изображение, которое в настоящее время (!) Соответствует :v4
:
docker pull gcr.io/${PROJECT}/test:v4
Digest: sha256:5946f2e093afbe203691cdc8a3e592db7b3e1d010619c4c97c3084de299f4d06
docker image ls
REPOSITORY TAG IMAGE ID
gcr.io/dazwilkin-200206-60102073/test v4 a1bb9204b417
Создайте изображение с повторным использованием (!) :v4
и снова потяните его:
gcloud builds submit --tag=gcr.io/${PROJECT}/test:v4 --project=${PROJECT}
Digest:
sha256:e128e4fe3d61fee0c995e9ac2cd1f05635fbdc017f32eb3116fdb593826674cc
gcloud container images list-tags gcr.io/${PROJECT}/test
DIGEST TAGS TIMESTAMP
e128e4fe3d61 v4 2020-02-06T17:36:59
5946f2e093af 2020-02-06T17:28:36
f03c9609c101 v3 2020-02-06T17:28:17
ab9fc60674a0 latest 2020-02-06T17:23:48
e5773d45cc5d 2020-02-06T17:21:27
NB Как тег :v4
перешел на новый дайджест (e128...
).
Но изображение с тегом :v4
локально - это старое изображение (5946...
).
Это только когда мы (не забудьте) снова потянуть изображение с тегом :v4
что мы извлечем то, что в настоящее время помечено как :v4
в GCR.
docker pull gcr.io/${PROJECT}/test:v4
Digest: sha256:e128e4fe3d61fee0c995e9ac2cd1f05635fbdc017f32eb3116fdb593826674cc
Status: Downloaded newer image for gcr.io/dazwilkin-200206-60102073/test:v4
docker image ls
REPOSITORY TAG IMAGE ID
gcr.io/dazwilkin-200206-60102073/test v4 6a916f95586a
NB Тот же тег (:v4
), но дайджесты (ха sh) уникальны к изображениям.
HTH!