Mac에서 GoogleContainerRegistry 액세스로 오류

개요


  • 로컬로 만든 Docker 이미지를 GCR (GoogleContainerRegistry)에 PUSH하고 싶습니다.
  • Mac에서 GCR로 DockerImage를 PULL/PUSH 할 수 없습니다 (Win은 시도하지 않음)
  • CloudShell에서 PULL/PUSH 가능
  • 분명히 권한 주위가 원인 같은
  • 다음과 같은 오류로 연주됩니다
  • 해결되었으므로 메모해 둡니다
  • $ docker pull asia.gcr.io/[project-id]/[repository]:latest
    Error response from daemon: pull access denied for asia.gcr.io/[project-id]/[repository], repository does not exist or may require 'docker login': denied: Permission denied for "latest" from request "/v2/[project-id]/[repository]/manifests/latest".
    

    상세



    Docker 인증 도우미로 gcloud 명령을 실행
    $ gcloud auth configure-docker
    

    ※업데이트를 촉구하는 메시지가 나왔을 경우는 "gcloud components update"를 실행하고 나서
  • GCR의 실태는 GoogleCloudStorage이므로 이것에 권한을 부여해 본다
  • "저장소 객체 뷰어"권한만 제공



  • PULL 해보기
    $ docker pull asia.gcr.io/[project-id]/[repository]:latest
    latest: Pulling from [project-id]/[repository]
    Digest: sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    Status: Downloaded newer image for asia.gcr.io/[project-id]/[repository]:latest
    asia.gcr.io/[project-id]/[repository]:latest
    

    확인
    $ docker images asia.gcr.io/[project-id]/[repository]
    REPOSITORY                             TAG                 IMAGE ID            CREATED             SIZE
    asia.gcr.io/[project-id]/[repository]   latest              f7bb5701a33c        2 weeks ago         126MB
    

    PULL 할 수 있다

    PUSH도 해본다
    $ docker image push asia.gcr.io/[project-id]/[repository]
    The push refers to repository [asia.gcr.io/[project-id]/[repository]]
    75248c0d5438: Preparing
    49434cc20e95: Preparing
    556c5fb0d91b: Preparing
    denied: Token exchange failed for project '[project-id]'. Caller does not have permission 'storage.buckets.get'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control
    

    역시 열람 권한만으로는 PUSH 할 수없는 모습

    스토리지 오브젝트 작성자 권한 부여하기



    PUSH 해보기
    $ docker image push asia.gcr.io/[project-id]/[repository]
    The push refers to repository [asia.gcr.io/[project-id]/[repository]]
    75248c0d5438: Preparing
    49434cc20e95: Preparing
    556c5fb0d91b: Preparing
    denied: Token exchange failed for project '[project-id]'. Caller does not have permission 'storage.buckets.get'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control
    

    안 좋은 것 같다. .

    "스토리지 오브젝트 관리자"를 부여해 봅니다.



    PUSH 해보기
    $ docker image push asia.gcr.io/[project-id]/[repository]:latest
    The push refers to repository [asia.gcr.io/[project-id]/[repository]]
    75248c0d5438: Preparing
    49434cc20e95: Preparing
    556c5fb0d91b: Preparing
    denied: Token exchange failed for project '[project-id]'. Caller does not have permission 'storage.buckets.get'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control
    

    좋지 않은 것 같습니다.

    '스토리지 관리자' 권한을 부여해 봅니다.



    PUSH 해보기
    $ docker image push asia.gcr.io/[project-id]/[repository]:latest
    The push refers to repository [asia.gcr.io/[project-id]/[repository]]
    75248c0d5438: Layer already exists
    49434cc20e95: Layer already exists
    556c5fb0d91b: Layer already exists
    latest: digest: sha256:36b77d8bb27ffca25c7f6f53cadd059aca2747d46fb6ef34064e31727325784e size: 948
    

    PUSH 할 수 있었다.

    결론


  • Mac 등에서 GCR에 액세스하려면 GCS 권한을 변경해야합니다
  • GCR에 대한 PULL에는 "저장소 객체 뷰어"권한이 필요합니다.
  • GCR에 대한 PUSH에는 "저장소 관리자"권한이 필요합니다
  • gcloud 인증은 미리 완료됩니다

  • 참고



    공식: 권한
    공식:인증

    좋은 웹페이지 즐겨찾기