Docker görüntüsünün sha256 kodunu nerede bulabilirim?


94

CentOS, Tomcat'in resimlerini sha256 kodlarını kullanarak çekmek istiyorum, örneğin

docker pull myimage@sha256:0ecb2ad60

Ama hiçbir yerde kullanmak için sha256 kodunu bulamıyorum.

Sha256 kodunun herhangi bir ipucu için DockerHub deposunu kontrol ettim, ancak bulamadım. Resimleri etiketlerine göre indirdim

docker pull tomcat:7-jre8

ve resmi kontrol et docker inspect meta verilerde bir sha256 kodu olup olmadığını görmek , ancak hiç yok (görüntünün sha256 kodunu eklemek sha256 kodunu değiştirebilir).

Bir görüntünün sha256 kodunu kendim hesaplamam ve onu kullanmam gerekir mi?


1
Dockerhub'da bununla ilgili bir sorun oluşturdum - github.com/docker/docker/issues/17670
Michael Barton

Yanıtlar:


97

Son cevap

Yorumlarda OhJeez tarafından önerilen düzenleme.

docker inspect --format='{{index .RepoDigests 0}}' $IMAGE

Orijinal cevap

Bunu kullanarak da elde edebileceğine inanıyorum

docker inspect --format='{{.RepoDigests}}' $IMAGE

Yalnızca Docker 1.9'da ve görüntü orijinal olarak özet tarafından çekildiyse çalışır. Ayrıntılar, docker sorun izleyicisindedir.


8
docker inspect --format='{{index .RepoDigests 0}}' $IMAGEKaşlı ayraçlar için kullanın (dizinin ilk dizinini döndürür)
OhJeez

@OhJeez, teşekkürler Cevabımı önerinizle güncelledim.
Michael Barton

Benim için en azından, bu da görüntüler için çalışır değil ama etiketi tarafından, sindirimi ile çekildi. Docker 18.09.7 ile.
sleske

Windows altında lütfen çift tırnak işareti kullanın --format = "..." ( github.com/docker/toolbox/issues/433#issuecomment-188790050 )
David

Bu gönderiyi inceledikten sonra, aşağıdaki gönderiye de göz atmak isteyebilirsiniz. stackoverflow.com/questions/56364643/…
vaibhavnd

85

İle alabilirsin docker images --digests

REPOSITORY          TAG    DIGEST                                                                    IMAGE ID     CREATED        SIZE
docker/ucp-agent    2.1.0  sha256:a428de44a9059f31a59237a5881c2d2cffa93757d99026156e4ea544577ab7f3   583407a61900 3 weeks ago    22.3 MB

1
Sadece özleri almak için de kullanabilirsiniz docker images --format '{{.Digest}}'. Bu, foreachözetlerle bazı çalışmalar yapmak için bir ifadede kullanışlıdır .
Mark Loyman

22

En basit ve en kısa yol şudur:

docker images --no-trunc --quiet $IMAGE

Bu yalnızca sha256:...dizeyi döndürür, başka hiçbir şey döndürmez .

Örneğin:

$ docker images --no-trunc --quiet debian:stretch-slim
sha256:220611111e8c9bbe242e9dc1367c0fa89eef83f26203ee3f7c3764046e02b248

Düzenle:

NOT: bu yalnızca yerel olan görüntülerde işe yarar. docker pull $IMAGEGerekirse önce yapabilirsiniz .


19

Az önce gördüm:

Bir görüntüyü çektiğimde, çıktının altında sha256 kodu görüntülenir (Özet: sha ....):

docker pull tomcat:7-jre8
7-jre8: Pulling from library/tomcat
902b87aaaec9: Already exists 
9a61b6b1315e: Already exists 
...   
4dcef5c50d60: Already exists 
Digest: sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
Status: Image is up to date for tomcat:7-jre8

Bu sha kodu

sha256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

ile görüntüyü daha sonra çekmek için kullanılabilir

docker çekin tomcat @ sha256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

Bu şekilde görüntünün değişmediğinden ve üretim için güvenle kullanılabileceğinden emin olabilirsiniz.


10
Bu, yalnızca çevrimiçi görüntüleri işlediği için tam bir çözüm değildir. Ya yerel bir görüntünün sha256'sını istiyorsanız?
Zelphir Kaltstahl

7

Mevcut cevaplara ek olarak, sahip olduğunuz tüm görseller için bir özet listesi almak için bu --digestsseçeneği de kullanabilirsiniz docker images.

docker images --digests

Daha fazla ayrıntıya inmek için bir grep ekleyebilirsiniz

docker images --digests | grep tomcat

5

Bu, eski kullanımdan kaldırılmış Docker Hub API'sinde görebileceğiniz Kimlik alanı olmalıydı

GET /v1/repositories/foo/bar/images HTTP/1.1
  Host: index.docker.io
  Accept: application/json

Parameters:

namespace – the namespace for the repo
repo_name – the name for the repo

Örnek Yanıt:

HTTP/1.1 200
Vary: Accept
Content-Type: application/json

[{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
{"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
"checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]

ANCAK: bu değil o şimdi nasıl çalıştığını yeni liman işçisi dağılımı . 628 numaralı soruna
bakın : "Etiket adıyla resim kimliğini alın"

/v1/Kayıt tepki /repositories/<repo>/tagsetiketi sapı ile birlikte görüntü kimliğini listelemek için kullanılan.
/v2/sadece kolu veriyor gibi görünüyor.

Yerel olarak bulunan kimlik ile karşılaştırmak için kimliği almak faydalı olacaktır. Kimliği bulabildiğim tek yer v1Compatmanifestin bölümündedir (bu, istediğim bilgi için gereğinden fazla)

Mevcut (2015 ortası) cevap:

V1 API'nin bu özelliği, görüntülerin arka uçta depolanması açısından hesaplama açısından çok pahalıydı. İkincil bir aramadan kaçınmak için yalnızca etiket adları numaralandırılır.
Ek olarak, V2 API, Resim Kimlikleriyle ilgilenmez. Bunun yerine, katmanın özelliği olarak hesaplanabilen ve bağımsız olarak doğrulanabilen katmanları tanımlamak için özütler kullanır.


4

Yukarıdaki yöntemlerin bazı durumlarda işe yaramadığını buldum. Ya:

  • aynı hash'e sahip birden çok görüntüyle iyi başa çıkmayın (.RepoDigests önerisi durumunda - belirli bir kayıt defteri yolunu kullanmak istediğinizde)
  • görüntüyü kayıtlara iterken iyi çalışmaz (.Id'nin yerel bir karma olduğu durumda, kayıt defterindeki karma değil).

Aşağıdaki yöntem hassastır, ancak belirli bir itilen kapsayıcı için belirli tam 'adı' ve karmayı çıkarmak için çalışır.

İşte senaryo - Bir görüntü aynı depodaki 2 farklı projeye ayrı ayrı yüklenir, bu nedenle RepoDigests'i sorgulamak 2 sonuç döndürür.

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest

[gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed gcr.io/beta/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed]

Alfa sonucunu kullanmak istiyorum, ancak hangi indeks olacağını tahmin edemiyorum. Bu yüzden, parantezleri kaldırmak ve her girişi ayrı bir satırda almak için metin çıktısını değiştirmem gerekiyor. Oradan sonucu kolayca anlayabilirim.

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest | sed 's:^.\(.*\).$:\1:' | tr " " "\n" | grep alpha

gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed 

3

@ Zelphir tarafından belirtildiği gibi, yalnızca yerel bir görüntü için mevcut olmadığından, özetleri kullanmak iyi bir yol değildir. Resim kimliği sha'nın etiketler / çekme / itme vb. Arasında en doğru ve tutarlı olduğunu varsayıyorum.

docker inspect --format='{{index .Id}}' $IMAGE

Hile yapar.


2

Resmi ilgili depodan çekerken bulabilirsiniz. Aşağıdaki komut, docker görüntüsünü çekerken Digest: sha256'dan bahseder.

09:33 AM##~::>docker --version
Docker version 19.03.4, build 9013bf5

Özet: sha256: 6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d

09:28 AM##~::>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
**Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d**
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

Görsel indirildikten sonra aşağıdakileri yapabiliriz

"ubuntu @ sha256: 6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d"

09:36 AM##~::>docker inspect ubuntu | grep -i sha256
        "Id": "sha256:775349758637aff77bf85e2ff0597e86e3e859183ef0baba8b3e8fc8d3cba51c",
            **"ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d"**
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
                "sha256:cc967c529ced563b7746b663d98248bc571afdb3c012019d7f54d6c092793b8b",
                "sha256:2c6ac8e5063e35e91ab79dfb7330c6154b82f3a7e4724fb1b4475c0a95dfdd33",
                "sha256:6c01b5a53aac53c66f02ea711295c7586061cbe083b110d54dafbeb6cf7636bf",
                "sha256:e0b3afb09dc386786d49d6443bdfb20bc74d77dcf68e152db7e5bb36b1cca638"

1

Sadece docker pull tomcat:7-jre8tekrar yayınlayın ve istediğinizi alacaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.