Dockerイメージのsha256コードはどこにありますか?


93

CentOS、Tomcatなどの画像を取得したい...のようにsha256コードを使用して

docker pull myimage@sha256:0ecb2ad60

しかし、どこでも使用できるsha256コードが見つかりません。

DockerHubリポジトリでsha256コードのヒントを確認しましたが、見つかりませんでした。タグで画像をダウンロードしました

docker pull tomcat:7-jre8

docker inspectメタデータにsha256コードがあるかどうかを確認するために画像をチェックしましたが、ありません(画像のsha256コードを追加すると、おそらくsha256コードが変更されます)。

画像のsha256コードを自分で計算して使用する必要がありますか?


1
これに関連する問題をdockerhubで作成しました-github.com/docker/docker/issues/17670–
Michael Barton

回答:


94

最新の回答

コメントでOhJeezによって提案された編集。

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

元の回答

私はあなたもこれを使用してこれを得ることができると信じています

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

Docker 1.9でのみ機能し、イメージが元々ダイジェストによってプルされた場合にのみ機能します。詳細は、docker issuetrackerにあります。


8
docker inspect --format='{{index .RepoDigests 0}}' $IMAGE中括弧なしで使用(配列の最初のインデックスを返します)
OhJeez 2017年

@OhJeez、ありがとう私はあなたの提案で私の答えを更新しました。
Michael Barton

少なくとも私にとっては、これはまたイメージのために動作していないダイジェストに引っ張られますが、タグによって。それはDocker18.09.7です。
sleske

Windowsでは、--format = "..."(二重引用符を使用してくださいgithub.com/docker/toolbox/issues/433#issuecomment-188790050
デヴィッド・

この投稿を読んだ後、以下の投稿も見てみたいと思うかもしれません。 stackoverflow.com/questions/56364643/...
vaibhavnd

85

あなたはそれを得ることができます 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
ダイジェストのみを取得するには、を使用することもできますdocker images --format '{{.Digest}}'。これはforeach、ダイジェストでいくつかの作業を行うためのステートメントで役立ちます。
マークロイマン

22

最も単純で最も簡潔な方法は次のとおりです。

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

これはsha256:...文字列のみを返し、他には何も返しません。

例えば:

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

編集:

注:これはローカルの画像に対してのみ機能します。docker pull $IMAGE必要に応じて、最初に行うことができます。


19

見たばかり:

画像をプルすると、sha256コードが出力の下部に表示されます(ダイジェスト: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

このshaコード

sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

後で画像をプルするために使用できます

docker pull tomcat @ sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

これにより、画像が変更されていないことを確認でき、制作に安全に使用できます。


10
これは、オンラインで画像を処理するだけなので、実際には完全なソリューションではありません。ローカルイメージのsha256が必要な場合はどうなりますか?
Zelphir Kaltstahl 2017年

7

既存の回答に加えて、実行--digests中にこのオプションを使用して、docker images所有しているすべての画像のダイジェストのリストを取得できます。

docker images --digests

grepを追加して、さらにドリルダウンできます

docker images --digests | grep tomcat

5

これは、古い非推奨の Docker HubAPIで確認できるIdフィールドである必要があります。

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

応答例:

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

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

しかし、これは新しいDockerディストリビューションで現在どのように機能しているかではありません問題628:「タグ名で画像IDを取得する」を 参照してください

/v1/レジストリの応答は/repositories/<repo>/tags、タグハンドルと一緒に画像IDのリストを表示するために使用しました。
/v2/ハンドルを与えるだけのようです。

ローカルで見つかったIDと比較するIDを取得すると便利です。IDを見つけることができる唯一の場所v1Compatは、マニフェストのセクションです(これは私が欲しい情報にはやり過ぎです)

現在(2015年半ば)の答えは次のとおりです。

V1 APIのこのプロパティは、画像をバックエンドに保存する方法にとって非常に計算コストがかかりました。二次ルックアップを回避するために、タグ名のみが列挙されます。
さらに、V2APIはイメージIDを処理しません。むしろ、ダイジェストを使用してレイヤーを識別します。レイヤーは、レイヤーのプロパティとして計算でき、個別に検証できます。


4

上記の方法がうまくいかない場合がありました。彼らはどちらか:

  • 同じハッシュを持つ複数の画像をうまく処理しない(.RepoDigestsの提案の場合-特定のレジストリパスを使用する場合)
  • イメージをレジストリにプッシュするときはうまく機能しません(レジストリ内のハッシュではなく、ローカルハッシュである.Idの場合)。

以下のメソッドはデリケートですが、特定のプッシュされたコンテナの特定のフルネームとハッシュを抽出するために機能します。

シナリオは次のとおりです。画像は同じリポジトリ内の2つの異なるプロジェクトに別々にアップロードされるため、RepoDigestsをクエリすると2つの結果が返されます。

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

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

アルファ結果を使用したいのですが、どのインデックスになるか予測できません。したがって、テキスト出力を操作して角かっこを削除し、各エントリを別々の行に配置する必要があります。そこから、結果を簡単にgrepできます。

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

gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed 

3

@zelphirが述べたように、ダイジェストを使用することは、ローカルのみの画像には存在しないため、良い方法ではありません。画像IDshaは、タグ/プル/プッシュなどで最も正確で一貫していると思います。

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

トリックを行います。


2

それぞれのリポジトリからイメージをプルするときに見つけることができます。以下のコマンドは、Dockerイメージをプルするときのダイジェスト:sha256について説明しています。

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

ダイジェスト: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

画像がダウンロードされると、次のことができます

"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

docker pull tomcat:7-jre8もう一度発行するだけで、必要なものが得られます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.