可能是您依赖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
您可以通过以下方式从特定图像摘要运行容器:
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
注意因为我们一直很明智,所以我们对不同的标签有不同的摘要。但是,如果我们无意中重用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
注意标签如何: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
注意相同的标签 ( :v4
) 但摘要(哈希)对于图像构建是唯一的。