我正在做以下事情:
docker build -t gcr.io/projid/imgname:333 -t gcr.io/projid/imgname:latest。
dockerlogin -u _json_key -p“$(cat /secrets/service-account.json)”https://gcr.io
docker推送 gcr.io/projid/imgname:333
docker push gcr.io/projid/imgname:latest
第一推命令的输出:
Pushing to google container registry ... The push refers to a repository [gcr.io/projid/imgname] 24af4f7c7118: Preparing 17b0972980d8: Preparing 6d6a6425aacb: Preparing 809c8c0dd73c: Preparing e8d45b8ab3ca: Preparing e8fa134cb7b8: Preparing 7cbcbac42c44: Preparing e8fa134cb7b8: Waiting 7cbcbac42c44: Waiting 809c8c0dd73c: Layer already exists e8d45b8ab3ca: Layer already exists 7cbcbac42c44: Layer already exists e8fa134cb7b8: Layer already exists 17b0972980d8: Pushed 24af4f7c7118: Pushed 6d6a6425aacb: Pushed 333: digest: sha256:dae8cf914ba49928e6f0a34f6740802403813e6d10aa1c1d448a62ce9bb69066 size: 1779
第二推命令的输出:
Pushing to google container registry ... The push refers to a repository [gcr.io/projid/imgname] 24af4f7c7118: Preparing 17b0972980d8: Preparing 6d6a6425aacb: Preparing 809c8c0dd73c: Preparing e8d45b8ab3ca: Preparing e8fa134cb7b8: Preparing 7cbcbac42c44: Preparing e8fa134cb7b8: Waiting 7cbcbac42c44: Waiting e8d45b8ab3ca: Layer already exists 809c8c0dd73c: Layer already exists 24af4f7c7118: Layer already exists 17b0972980d8: Layer already exists 6d6a6425aacb: Layer already exists 7cbcbac42c44: Layer already exists e8fa134cb7b8: Layer already exists latest: digest: sha256:4f57375919829982741d095f8917306fe0c1410e115d030179bae4b8e4299c30 size: 1742
问题 :为什么具有两个标签的图像在Google容器registry中导致两个不同的图像?
说两个不同的图像是指两个不同的摘要值?
SHA代表安全散列algorithm(Secure Hash Algorithm),它是一系列encryption散列函数,SHA-256algorithm产生一个几乎唯一的,固定大小的256位(32字节)散列。 由于图像标签也被用来计算摘要,摘要的值将会被显着改变,即使只有一个标签位发生变化。 在密码学中,这被称为雪崩效应,你可以在这里阅读更多关于它的信息 。
你当然是推动两个图像标签。 我build议用一个标签来构build,然后添加第二个标签,并逐个推送图片标签。 如果第二个添加一个新的摘要是一个GCR错误。 我遇到了这个错误,并通过删除存储库来解决,以便在下次推送时重新创build。 在我的configuration中,Docker版本也是一个因素。 版本17.04.0-ce,构build4845c56会触发额外的摘要,而版本17.03.1-ce,build立c6d412e会正常工作。