도커 이미지의 sha256 코드는 어디에서 찾을 수 있습니까?


89

다음과 같이 sha256 코드를 사용하여 centos, tomcat, ...의 이미지를 가져오고 싶습니다.

docker pull myimage@sha256:0ecb2ad60

하지만 어디에서나 사용할 sha256 코드를 찾을 수 없습니다.

sha256 코드에 대한 힌트가 있는지 dockerhub 저장소를 확인했지만 찾을 수 없었습니다. 태그로 이미지를 다운로드했습니다.

docker pull tomcat:7-jre8

docker inspect메타 데이터에 sha256 코드가 있는지 확인하기 위해 이미지를 확인 했지만 아무것도 없습니다 (이미지의 sha256 코드를 추가하면 sha256 코드가 변경 될 수 있음).

이미지의 sha256 코드를 직접 계산하고 사용해야합니까?


1
나는 이것과 관련된 dockerhub에 문제를 만들었습니다 -github.com/docker/docker/issues/17670
Michael Barton

답변:


87

최신 답변

댓글에서 OhJeez가 제안한 편집.

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

원래 답변

나는 당신이 또한 이것을 사용할 수 있다고 믿습니다

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

Docker 1.9에서만 작동하며 이미지가 원래 다이제스트에서 가져온 경우에만 작동합니다. 자세한 내용은 도커 문제 추적기에 있습니다.


7
사용 docker inspect --format='{{index .RepoDigests 0}}' $IMAGE없이 괄호를위한은 (배열의 첫번째 인덱스를 반환)
OhJeez

@OhJeez, 감사합니다. 귀하의 제안으로 제 답변을 업데이트했습니다.
Michael Barton

나를 위해 적어도,이 또한 이미지 작동 하지 하지만 태그에 의해, 다이제스트에 의해 당겼다. Docker 18.09.7입니다.
sleske

Windows에서는 큰 따옴표를 사용하십시오 --format = "..."( github.com/docker/toolbox/issues/433#issuecomment-188790050 )
David

81

당신은 그것을 얻을 수 있습니다 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

다이제스트 만 가져 오려면을 사용할 수도 있습니다 docker images --format '{{.Digest}}'. 이것은 foreach다이제스트로 작업을 수행하기 위한 명령문 에서 유용합니다 .
Mark Loyman

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

이 샤 코드

sha256 : c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

나중에 이미지를 당기는 데 사용할 수 있습니다.

docker pull tomcat @ sha256 : c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

이렇게하면 이미지가 변경되지 않고 프로덕션에 안전하게 사용할 수 있습니다.


10
이것은 온라인에서만 이미지를 처리하기 때문에 실제로 완전한 솔루션은 아닙니다. 로컬 이미지의 sha256을 원하면 어떨까요?
Zelphir Kaltstahl

19

가장 간단하고 간결한 방법은 다음과 같습니다.

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

이것은 sha256:...문자열 만 반환 하고 다른 것은 반환 하지 않습니다.

예 :

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

편집하다:

참고 : 이것은 로컬 이미지에 대해서만 작동합니다. docker pull $IMAGE필요한 경우 먼저 할 수 있습니다 .


7

기존 답변 외에도 가지고있는 모든 이미지에 대한 요약 목록을 가져 오는 --digests동안 옵션을 사용할 docker images수 있습니다.

docker images --digests

grep을 추가하여 더 드릴 다운 할 수 있습니다.

docker images --digests | grep tomcat

5

이전에 사용되지 않는 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"}]

그러나 이것은 새로운 도커 배포판 에서 현재 작동하는 방식 이 아닙니다 . 문제 628 : "태그 이름으로 이미지 ID 가져 오기" 참조

/v1/레지스트리 응답 /repositories/<repo>/tags태그 핸들과 함께 이미지 ID를 나열하는 데 사용.
/v2/핸들을주는 것 같습니다.

로컬에서 찾은 ID와 비교할 ID를 가져 오는 것이 유용합니다. 내가 ID를 찾을 수있는 유일한 위치 v1Compat는 매니페스트 의 섹션입니다 (원하는 정보에 대해 과도 함).

현재 (2015 년 중반) 답변은 다음과 같습니다.

V1 API의이 속성은 이미지가 백엔드에 저장되는 방식에 대해 계산 비용이 많이 들었습니다. 2 차 조회를 피하기 위해 태그 이름 만 열거됩니다.
또한 V2 API는 이미지 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]

알파 결과를 사용하고 싶지만 어떤 인덱스가 될지 예측할 수 없습니다. 따라서 대괄호를 제거하고 각 항목을 별도의 줄에 표시하려면 텍스트 출력을 조작해야합니다. 거기에서 결과를 쉽게 확인할 수 있습니다.

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

gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed 

3

@zelphir에서 언급했듯이 다이제스트를 사용하는 것은 로컬 전용 이미지에 존재하지 않기 때문에 좋은 방법이 아닙니다. 이미지 ID sha가 태그 / 풀 / 푸시 등에서 가장 정확하고 일관 적이라고 가정합니다.

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

트릭을 수행합니다.


2

각 저장소에서 이미지를 가져올 때 찾을 수 있습니다. Bellow 명령은 도커 이미지를 가져올 때 Digest : sha256을 언급합니다.

09:33 AM ## ~ ::> docker --version Docker 버전 19.03.4, 빌드 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.