web-dev-qa-db-ja.com

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

私はcentos、Tomcatの画像を引き出したい...のように彼らのsha256コードを使用して

docker pull myimage@sha256:0ecb2ad60

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

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

docker pull Tomcat:7-jre8

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

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

53
christian

見ただけで:

画像を取得すると、出力の下部にsha256コードが表示されます(Digest: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

この社コード

sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

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

docker pull Tomcat @ sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

これにより、イメージが変更されておらず、生産に安全に使用できることを確認できます。

15
christian

最新の回答

コメントでOhJeezが提案した編集。

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

元の答え

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

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

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

53
Michael Barton

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

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

docker images --digests

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

docker images --digests | grep Tomcat
4
BKC

これは、古い 非推奨Docker Hub API で確認できる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"}]

しかし、これはnotであり、新しいドッカーディストリビューション
issue 628: "タグ名付きの画像IDを取得"」を参照

タグハンドルとともに画像IDをリストするために使用される/v1/レジストリレスポンス/repositories/<repo>/tags.
/v2/はハンドルを与えるように見えるだけです。

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

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

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

4
VonC

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

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

トリックを行います。

2
Kristofer

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

0
okwap