HTTP API V2

Estimated reading time: 127 minutes

Docker Registry HTTP API V2

Introduction

Docker Registry HTTP API 는 docker 엔진에 이미지의 배포를 용이하게 할 수있는 프로토콜입니다. 이것은 도커 이미지에 대한 정보를 관리하고 배포 할 수있는 서비스인 도커 레지스트리 인스턴스와 상호 작용합니다. 이 사양은 Docker Registry HTTP API V2 로 알려진이 API 버전 2의 작동을 다룹니다 .

V1 레지스트리 프로토콜을 사용할 수 있지만, 이 아키텍처에는 몇 가지 문제가 있습니다. 이 사양의 주된 드라이버는 docker / docker # 8093 에서 다루는, docker  이미지 형식에 대한 일련의 변경 사항들입니다 새로운 자체 포함 이미지 매니페스트는 이미지 정의를 단순화하고 보안을 향상시킵니다. 이 사양은 성능 향상, 대역폭 사용 감소 및 백엔드 손상 가능성 감소를 위해 매니페스트 형식의 새로운 속성을 활용하여 해당 작업을 기반으로합니다.

이 사양에 이르는 관련 세부 정보 및 기록은 다음 문제를 참조하십시오.



Scope

이 사양은 도커 레지스트리와 도커 코어 간의 상호 작용에 대한 URL 레이아웃과 프로토콜을 다룹니다. 이것은 docker core registry API와 docker-registry의 재 작성에 영향을 미친다. Docker 레지스트리 구현은 다른 API 끝점을 구현할 수 있지만, 이 사양에서는 다루지 않습니다.

여기에는 다음과 같은 기능이 포함됩니다.

  • 네임 스페이스 지향 URI 레이아웃
  • V2 이미지 매니페스트 형식의 PUSH / PULL 레지스트리 서버
  • 재개 가능 계층 PUSH 지원
  • V2 클라이언트 라이브러리 구현

인증 및 권한 부여 지원이 이 사양에 영향을 미치지 만 프로토콜의 세부 사항은 향후 사양으로 남습니다. 관련 헤더 정의 및 오류 코드는 클라이언트가 마주 칠 수있는 것에 대한 표시를 제공합니다.

FUTURE

이 사양을 자르는 과정에서 논의 된 기능이 있습니다. 다음은 불완전한 목록입니다.

  • 변경할 수없는 이미지 참조
  • 다중 아키텍처 지원
  • v2 호환성 표현에서 마이그레이션

이것들은이 규격의 범위 밖이거나 다른 규격의 범위 또는 향후 버전으로 연기 된 특징을 나타낼 수있다.


Use Cases

대부분의 경우 이전 레지스트리 API의 사용 사례가 새 버전에 적용됩니다. 차별화 된 사용 사례는 아래에서 다룹니다.

IMAGE VERIFICATION

도커 엔진 인스턴스는 "LATEST"태그와 함께 "LIBRARY/UBUNTU"라는 이름의 검증 된 이미지를 실행하려고합니다. 엔진이 레지스트리에 접속하여 “LIBRARY/UBUNTU:LATEST”에 대한 매니페스트를 요청합니다. 신뢰할 수없는 레지스트리는 매니페스트를 반환합니다. 각각의 레이어를 다운로드하기 전에 엔진은 매니페스트의 서명을 확인하여 콘텐츠가 신뢰할 수있는 원본에서 생성되었으며 변조가 발생하지 않았는지 확인합니다. 각 레이어를 다운로드 한 후 엔진은 레이어의 DIGEST를 확인하여 매니페스트가 지정한 내용과 일치하는지 확인합니다.

RESUMABLE PUSH

회사 X의 빌드 서버는 이미지 레이어 전송을 완료하기 전에 도커 레지스트리에 대한 연결을 잃었습니다. 연결이 돌아온 후에 빌드 서버는 이미지를 다시 업로드하려고 시도합니다. 레지스트리는 이전에 업로드가 부분적으로 시도되었음을 빌드 서버에 알립니다. 빌드 서버는 이미지 파일을 완성하기 위해 나머지 데이터만을 보내는 것으로 응답합니다.

RESUMABLE PULL

회사 X는 더 많은 연결 문제가 있지만 이번에는 배포 데이터 센터에 있습니다. 이미지를 다운로드 할 때 연결이 완료되기 전에 중단됩니다. 클라이언트는 부분 데이터를 유지하고 HTTP RANGE요청을 사용 하여 반복되는 데이터 다운로드를 방지합니다.

LAYER UPLOAD DE-DUPLICATION

회사 Y의 빌드 시스템은 빌드 프로세스 A와 B에서 두 개의 동일한 도커 레이어를 만듭니다. 빌드 프로세스 A가 B 이전에 레이어 업로드를 완료합니다. 프로세스 B가 레이어 업로드를 시도하면 레지스트리는 레이어가 이미 알려져 있기 때문에 필요하지 않음을 나타냅니다.

프로세스 A와 B가 같은 레이어를 동시에 업로드하면 두 작업이 모두 진행되고 완료된 첫 번째 작업이 레지스트리에 저장됩니다 (참고 : 일부 잠금 메커니즘이있는 닥치는 것을 방지하기 위해이 작업을 수정할 수 있습니다).


Overview

이 절에서는 클라이언트 플로우와 API 엔드 포인트의 세부 사항에 대해 설명합니다. 새 API의 URI 레이아웃은 네임 스페이스를 활용하여 풍부한 인증 및 권한 부여 모델을 지원하도록 구성됩니다. 모든 엔드 포인트에는 API 버전 및 저장소 이름이 접두어로 붙습니다.

/v2/<name>/

예를 들어 library/ubuntu 저장소로 작동하는 API 엔드 포인트인 경우 URI 접두사는 다음과 같습니다.

/v2/library/ubuntu/

이 스키마는 다양한 방식으로 제어 할 수있는 URI 접두사 및 http 메서드를 사용하여 다양한 작업과 메서드에 대한 풍부한 액세스 제어를 제공합니다.

전통적으로 저장소 이름은 항상 각 경로 구성 요소가 30 자 미만인 두 경로 구성 요소였습니다. V2 레지스트리 API는 이것을 강요하지 않습니다. 저장소 이름에 대한 규칙은 다음과 같습니다.

  1. 저장소 이름은 경로 구성 요소 로 나뉩니다 저장소 이름의 구성 요소는 하나 이상의 소문자, 영숫자 문자 여야하며 선택적으로 마침표, 대시 또는 밑줄로 구분됩니다. 보다 엄격하게 말하면 정규 표현식과 일치해야합니다 [a-z0-9]+(?:[._-][a-z0-9]+)*.
  2. 저장소 이름에 둘 이상의 경로 구성 요소가있는 경우에는 슬래시 ( "/")로 구분해야합니다.
  3. 슬래시를 포함하여 저장소 이름의 총 길이는 256 자 미만이어야합니다.

이러한 이름 요구 사항 은 레지스트리 API 에만 적용되며 다른 도커 생태계 구성 요소가 지원하는 항목의 수퍼 세트를 수락해야합니다.

모든 엔드 포인트는 적절한 경우 공격적인 http 캐싱, 압축 및 범위 헤더를 지원해야합니다. 새로운 API는 HTTP 의미를 가능한 한 활용하려고 시도하지만 표준에서 타겟 기능을 구현하기 위해 끊어 질 수 있습니다.

개별 종점에 대한 자세한 내용은 세부 정보 섹션을 참조하십시오 .


Errors

관련 절에서 자세히 다루는 실행 가능한 실패 조건은 json response body 4xx 응답의 일부로 보고됩니다. 하나 이상의 오류가 다음 형식으로 반환됩니다:

{
    "errors:" [{
            "code": <error identifier>,
            "message": <message describing condition>,
            "detail": <unstructured>
        },
        ...
    ]
}

이 code필드는 고유한 식별자가되며, 모든 대문자는 규칙에 따라 밑줄이 그어져 있습니다. message필드는 사람이 읽을 수있는 문자열입니다. 선택적 detail필드는 클라이언트가 문제를 해결하는 데 사용할 수있는 정보를 제공하는 임의의 json 데이터를 포함할 수 있습니다.

클라이언트가 특정 오류 코드에 대해 조치를 취할 수있는 반면 레지스트리는 새로운 오류 코드를 추가 할 수 있습니다. 모든 클라이언트 구현은, API 호환성을 손상시키지 않고 오류 코드를 추가 할 수 있도록, 알 수없는 오류 코드를 UNKNOWN으로 처리해야 합니다. 사양의 목적 상 오류 코드는 추가될 수만 있으며 절대로 제거되지 않습니다.

모든 오류 코드의 전체 계정을 보려면 오류 섹션을 참조하십시오 .


API Version Check

 /v2/에 설치된, 최소 엔드 포인트는 응답 상태에 따라 버전 지원 정보를 제공합니다. 요청 형식은 다음과 같습니다:

GET /v2/

만일 200 OK응답이 반환되면, 레지스트리는 V2 (.1) 레지스트리 API를 구현하고 클라이언트는 V2 수행작업을 안전하게 진행할 수 있습니다. 선택적으로 응답에는 응답 본문에서 지원되는 경로에 대한 정보가 포함될 수 있습니다. 클라이언트는 이 데이터를 무시할 준비가되어 있어야합니다.

만일 401 Unauthorized응답이 반환되면, 클라이언트는 "WWW 인증"헤더의 내용에 따라 조치를 취해야 하며, 다시 엔드 포인트를 시도해야합니다. 액세스 제어 설정에 따라 클라이언트는 이 검사가 성공하더라도 다른 자원에 대해 인증해야 할 수 있습니다.

만일 404 Not Found응답 상태, 또는 그 외의 돌발적인 상태가 반환되면, 클라이언트는 레지스트리가 API의 V2를 구현하지 않는다는 가정하에 진행해야합니다.

200 OK또는 401 Unauthorized응답이 반환될 때, "Docker-Distribution-API-Version" 헤더가 "registry / 2.0"으로 설정되어야 합니다. 클라이언트는이 헤더 값을 요구하여 엔드 포인트가 이 API를 제공하는지 판별 할 수 있습니다. 이 헤더를 생략하면 클라이언트가 이전 API 버전으로 원복 할 수 있습니다.


Content Digests

이 API 디자인은 콘텐츠 주소 지정 기능에 의해 크게 좌우됩니다 이 디자인의 핵심은 콘텐츠 주소 지정 가능 식별자의 개념입니다. 충돌 방지 해시 바이트를 사용하여 콘텐츠를 고유하게 식별합니다. 이러한 식별자는 공통 알고리즘 을 선택하여 독립적으로 계산하고 검증 할 수 있습니다 그러한 식별자가 안전한 방식으로 통신 될 수 있다면, 안전하지 않은 소스로부터 콘텐츠를 검색하여 독립적으로 계산할 수 있고 올바른 콘텐츠가 확보되었는지 확인할 수 있습니다. 간단히 말해 식별자는 콘텐츠의 속성입니다.

다른 개념을 명확히하기 위해이 식별자를 다이제스트 라고 부릅니다 다이제스트 (A)의 구성된 직렬화 해시 결과 알고리즘 과 육각 부. 이 알고리즘 은 다이제스트를 계산하는 데 사용 된 방법론을 식별합니다. 육각 부 해시의 헥스 인코딩 결과이다.

다음 문법과 일치 하는 다이제스트 문자열을 정의합니다 .

digest      := algorithm ":" hex
algorithm   := /[A-Fa-f0-9_+.-]+/
hex         := /[A-Fa-f0-9]+/

다이제스트의 몇 가지 예 는 다음과 같습니다.

요람기술
sha256 : 6c3c624b58dbbcd3c0dd82b4c53f04194d1247c6eebdaab7c610cf7d66709b3b일반적인 sha256 기반 다이제스트

이 알고리즘 은 다양한 알고리즘을 구현할 수 있지만 준수하는 구현에는 sha256을 사용해야합니다. 해시를 계산하기 전에 입력을 많이 처리하는 것이 다이제스트 의 고유성을 떨어 뜨리는 것을 방지하기 위해 권장되지 않지만 일관된 식별자를 보장하기 위해 일부 정규화가 수행 될 수 있습니다.

요약 코드에서 간단한 예제를 사용하여 다이제스트 계산을 보여줍니다.

let C = 'a small string'
let B = sha256(C)
let D = 'sha256:' + EncodeHex(B)
let ID(C) = D

위의 예에서 우리는 bytestring을 C함수에 전달했습니다.이 함수 SHA256는 바이트 B해시 인 바이트 테스트를 반환합니다 CD알고리즘을의 16 진수 인코딩으로 연결 가져옵니다 B그런 다음 식별자를 Cto ID(C) 와 같게 정의합니다 D다이제스트는 D식별자와 독립적으로 계산 하여 비교하여 확인할 수 있습니다 ID(C).

다이제스트 헤더

http 콘텐츠의 확인을 제공하기 위해 모든 응답에 Docker-Content-Digest헤더 가 포함될 수 있습니다 여기에는 응답에 반환 된 대상 엔터티의 다이제스트가 포함됩니다. 얼룩에 대해서, 이것은 얼룩 전체 내용입니다. 매니페스트의 경우 이는 JWS 페이로드라고도하는 서명 콘텐츠가없는 매니 페스트 바디입니다. 다이제스트 계산에 일반적으로 사용되는 정규화는 매니페스트와 같이 콘텐츠의 mediatype에 따라 달라질 수 있습니다.

클라이언트는 헤더를 무시하도록 선택하거나 내용 무결성 및 전송 보안을 보장하기 위해 헤더를 확인할 수 있습니다. 이것은 다이제스트로 가져올 때 가장 중요합니다. 보안을 유지하기 위해 콘텐츠를 가져 오는 데 사용 된 다이제스트에 대해 콘텐츠를 확인해야합니다. 때로는 반환 된 다이제스트가 요청을 시작하는 데 사용 된 다이제스트와 다를 수 있습니다. 이러한 다이제스트는 다른 도메인 에서 온 것으로 간주되므로알고리즘에 대해 다른 값을 갖습니다 이 경우 클라이언트는 두 도메인의 다이제스트를 확인하거나 서버의 다이제스트를 무시할 수 있습니다. 보안을 유지하기 위해 클라이언트  항상 콘텐츠 를 가져 오는 데 사용 된 다이제스트 와 비교하여 콘텐츠를 확인 해야합니다 .

중요 : 경우 다이제스트 콘텐츠를 가져 오기 위해 사용하는 경우, 클라이언트가 동일한가 그것을 확인하기 위해 컨텐츠를 취득하는 데 사용 다이제스트 사용해야합니다. 헤더 Docker-Content-Digest는 "로컬"다이제스트를 통해 신뢰되어서는 안됩니다.

Pulling An Image

"이미지"는 JSON 매니페스트와 개별 레이어 파일의 조합입니다. 이미지를 가져 오는 프로세스는이 두 구성 요소를 검색하는 것을 중심으로합니다.

이미지를 가져 오는 첫 번째 단계는 매니페스트를 검색하는 것입니다. 참조를 위해 레지스트리의 관련 매니페스트 필드는 다음과 같습니다.

기술
name이미지의 이름.
tag이 이미지 버전의 태그입니다.
fsLayers레이어 설명자 목록 (다이제스트 포함)

signagure

매니페스트 콘텐츠를 확인하는 데 사용되는 JWS

매니페스트 형식에 대한 자세한 내용은 docker / docker # 8093을 참조하십시오 .

매니 페스트가 준비되면 클라이언트는 이름과 레이어가 유효한지 확인하기 위해 서명을 확인해야합니다. 일단 확인되면 클라이언트는 다이제스트를 사용하여 개별 레이어를 다운로드합니다. 레이어는 다이제스트로 고정 된 V2 레지스트리 API에 BLOB로 저장됩니다.

이미지 매니페스트 가져 오기

이미지 매니페스트는 다음 url로 가져올 수 있습니다.

GET /v2/<name>/manifests/<reference>

name및 reference매개 변수는 이미지를 확인하고 필요합니다. 참조는 태그 또는 다이제스트를 포함 할 수 있습니다.

클라이언트는 지원하는 매니 페스트 콘텐츠 유형을 나타내는 Accept 헤더를 포함해야합니다. 매니페스트 형식 및 해당 콘텐츠 형식에 대한 자세한 내용은 manifest-v2-1.md 및 manifest-v2-2.md를 참조하십시오 응답이 성공적이면 Content-Type 헤더는 반환되는 매니페스트 유형을 나타냅니다.

404 Not Found이미지가 레지스트리에 알 수없는 경우 응답이 반환됩니다. 이미지가 존재하고 응답이 성공하면 다음 형식으로 이미지 매니페스트가 반환됩니다 (자세한 내용은 docker / docker # 8093 참조).

{
   "name": <name>,
   "tag": <tag>,
   "fsLayers": [
      {
         "blobSum": <digest>
      },
      ...
    ]
   ],
   "history": <v1 images>,
   "signature": <JWS>
}

클라이언트는 레이어를 가져 오기 전에 반환 된 매니페스트 서명을 확인해야합니다.

기존 매니페스트

이미지 매니페스트는 다음 URL을 통해 존재 여부를 확인할 수 있습니다.

HEAD /v2/<name>/manifests/<reference>

name및 reference매개 변수는 이미지를 확인하고 필요합니다. 참조는 태그 또는 다이제스트를 포함 할 수 있습니다.

404 Not Found이미지가 레지스트리에 알 수없는 경우 응답이 반환됩니다. 이미지가 존재하고 응답이 성공적이면 응답은 다음과 같습니다.

200 OK
Content-Length: <length of manifest>
Docker-Content-Digest: <digest>

레이어 당기기

레이어는 레지스트리의 얼룩 부분에 저장되며 다이제스트가 입력됩니다. 레이어를 당기는 것은 표준 http 요청에 의해 수행됩니다. URL은 다음과 같습니다.

GET /v2/<name>/blobs/<digest>

계층에 대한 액세스 name는 저장소의 gated에 의해 처리 되지만 레지스트리에 의해 고유하게 식별됩니다 digest.

이 엔드 포인트는 계층을 다운로드하기 위해 307 (302 <HTTP 1.1)의 다른 서비스로 리디렉션 할 수 있으며 클라이언트는 리디렉션을 처리 할 준비가되어 있어야합니다.

이 엔드 포인트는 이미지 레이어에 대한 적극적인 HTTP 캐싱을 지원해야합니다. Etags, 수정 날짜 및 기타 캐시 제어 헤더에 대한 지원이 포함되어야합니다. 증분 다운로드를 허용하려면 Range요청도 지원되어야합니다.

Pushing An Image

이미지를 밀면 당김과 반대 순서로 작동합니다. 이미지 매니페스트를 어셈블 한 후 클라이언트는 먼저 개별 레이어를 푸시해야합니다. 레이어가 레지스트리에 완전히 푸시되면 클라이언트는 서명 된 매니페스트를 업로드해야합니다.

프로세스의 각 단계에 대한 자세한 내용은 다음 절에서 다룹니다.

레이어 밀기

모든 레이어 업로드는 두 단계를 사용하여 업로드 프로세스를 관리합니다. 첫 번째 단계는 레지스트리 서비스에서 업로드를 시작하고 두 번째 단계를 수행하기위한 url을 반환합니다. 두 번째 단계에서는 업로드 URL을 사용하여 실제 데이터를 전송합니다. 업로드는 데이터를 푸시하고 업로드 상태를 확인하는 데 사용할 수있는 URL을 반환하는 POST 요청으로 시작됩니다.

Location헤더는 각 요청 후 업로드 위치를 통신하는 데 사용됩니다. 이 사양에서는 변경되지 않지만 클라이언트는 API에서 반환 한 최신 값을 사용해야합니다.

업로드 시작

프로세스를 시작하려면 POST 요청을 다음 형식으로 실행해야합니다.

POST /v2/<name>/blobs/uploads/

이 요청의 매개 변수는 레이어가 링크 될 이미지 네임 스페이스입니다. 이 요청에 대한 응답은 아래에서 다룹니다.

기존 레이어

레이어의 존재 여부 HEAD는 blob 저장소 API에 대한 요청을 통해 확인할 수 있습니다 요청은 다음과 같이 형식화되어야합니다.

HEAD /v2/<name>/blobs/<digest>

다이제스트가 지정된 계층 digest이 사용 가능하면 실제 본문 내용이없는 200 OK 응답이 수신됩니다 (http 사양에 따름). 응답은 다음과 같이 보입니다.

200 OK
Content-Length: <length of blob>
Docker-Content-Digest: <digest>

이 응답을 받으면 클라이언트는 해당 이름으로 레지스트리에서 이미 사용 가능한 것으로 간주하고 추가 작업을 수행하지 않아야합니다. 바이너리 다이제스트는 기존 레지스트리 계층과 다를 수 있지만 다이제스트는 일치한다는 점에 유의하십시오.

레이어 업로드

POST 요청이 성공 202 Accepted하면 Location헤더에 업로드 URL과 함께 응답이 반환됩니다 .

202 Accepted
Location: /v2/<name>/blobs/uploads/<uuid>
Range: bytes=0-<offset>
Content-Length: 0
Docker-Upload-UUID: <uuid>

나머지 업로드 프로세스는 Location헤더 에서 "업로드 URL"이라고하는 반환 된 URL을 사용하여 수행 할 수 있습니다 업로드 URL에 대한 모든 응답은 데이터 전송 여부에 관계없이이 형식으로 제공됩니다. 헤더 의 URI 형식 ( /v2/<name>/blobs/uploads/<uuid>Location이 지정 되었지만 클라이언트는이 헤더를 불투명 한 URL로 취급해야하며 절대 어셈블하지 않아야합니다. uuid매개 변수가 실제 UUID 일 수 있지만 이 제안은 형식에 제약을 부과하지 않으며 클라이언트는 절대로 어떤 것도 부과해서는 안됩니다.

클라이언트가 로컬 업로드 상태와 원격 업로드 상태를 연관시켜야하는 경우 Docker-Upload-UUID헤더 의 내용을 사용해야합니다. 이러한 ID는 재개 가능한 업로드를 구현할 때 마지막으로 사용한 위치 헤더를 사용하는 데 사용될 수 있습니다.

업로드 진행

업로드 프로세스의 진행 및 청크 조정은 Range헤더를 통해 조정됩니다 이것이 Range 헤더 의 비표준적인 사용이지만 많이 사용되는 API에서 유사한 접근법의 예가 있습니다. 방금 시작한 업로드의 경우, 1000 바이트의 레이어 파일을 예로 들면 Range헤더는 다음과 같습니다.

Range: bytes=0-0

업로드 상태를 확인하려면 업로드 URL에 GET 요청을 보냅니다.

GET /v2/<name>/blobs/uploads/<uuid>
Host: <registry host>

응답은 204 상태를 반환한다는 점을 제외하고는 위와 유사합니다.

204 No Content
Location: /v2/<name>/blobs/uploads/<uuid>
Range: bytes=0-<offset>
Docker-Upload-UUID: <uuid>

HTTP Range헤더 바이트 범위는 포괄적이며 비표준 유스 케이스 에서조차이를 준수합니다.

모 놀리 식 업로드

모 놀리 식 업로드는 단일 청크가있는 청크 업로드이며 청크의 복잡성을 피하고자하는 고객이 선호 할 수 있습니다. "모노 리식 (monolithic)"업로드를 수행하려면 제공된 전체 URL에 콘텐츠 전체를 넣으면됩니다.

PUT /v2/<name>/blobs/uploads/<uuid>?digest=<digest>
Content-Length: <size of layer>
Content-Type: application/octet-stream

<Layer Binary Data>

"digest"매개 변수는 PUT 요청에 포함되어야합니다. 매개 변수 및 예상 응답에 대한 자세한 내용은 완료된 업로드 섹션을 참조하십시오.

청크 업로드

청크 업로드를 수행하기 위해 클라이언트는 범위 헤더를 지정하고 레이어 파일의 해당 부분 만 포함 할 수 있습니다.

PATCH /v2/<name>/blobs/uploads/<uuid>
Content-Length: <size of chunk>
Content-Range: <start of range>-<end of range>
Content-Type: application/octet-stream

<Layer Chunk Binary Data>

서버가 계층 적 청크 분할을 순서대로 수신해야한다는 것을 제외하고는 계층 청크 분할에 대한 시행이 없습니다. 서버는 최소 청크 크기를 적용 할 수 있습니다. 서버가 청크를 받아 들일 수없는 경우 416 Requested Range Not Satisfiable 응답이 반환되고 Range현재 상태를 나타내는 헤더 가 포함됩니다 .

416 Requested Range Not Satisfiable
Location: /v2/<name>/blobs/uploads/<uuid>
Range: 0-<last valid range>
Content-Length: 0
Docker-Upload-UUID: <uuid>

이 응답을받은 경우 클라이언트는 "마지막 유효 범위"에서 다시 시작하여 후속 청크를 업로드해야합니다. A 416은 다음 조건 하에서 반환됩니다 :

  • 콘텐츠 범위 헤더 형식이 잘못되었습니다.
  • 순서가 잘못된 청크 : 다음 청크의 범위는 이전 응답의 "마지막 유효 범위"바로 다음에 시작해야합니다.

청크가 업로드의 일부로 허용 되면 현재 업로드 상태 202 Accepted의 Range헤더를 포함하여 응답이 반환됩니다 .

202 Accepted
Location: /v2/<name>/blobs/uploads/<uuid>
Range: bytes=0-<offset>
Content-Length: 0
Docker-Upload-UUID: <uuid>

완료된 업로드

업로드가 완료된 것으로 간주 되려면 클라이언트가 PUT 다이제스트 매개 변수를 사용하여 업로드 끝점 에서 요청을 제출해야합니다 제공되지 않으면 업로드가 완료된 것으로 간주되지 않습니다. 최종 청크의 형식은 다음과 같습니다.

PUT /v2/<name>/blob/uploads/<uuid>?digest=<digest>
Content-Length: <size of chunk>
Content-Range: <start of range>-<end of range>
Content-Type: application/octet-stream

<Last Layer Chunk Binary Data>

선택적으로 모든 청크가 이미 업로드 된 경우, 매개 변수와 길이가 0 인 PUT요청 digest이 전송되어 업로드를 완료하고 유효성을 검사 할 수 있습니다. 여러 개의 "다이제스트"매개 변수가 다른 다이제스트와 함께 제공 될 수 있습니다. 서버는 아무도 또는 모두를 확인하지 않을 수 있지만 합니다 내용이 거부되는 경우 클라이언트에 통지.

마지막 청크가 수신되고 레이어의 유효성이 검사되면 클라이언트는 다음과 같은 201 Created응답 을 받게됩니다 .

201 Created
Location: /v2/<name>/blobs/<digest>
Content-Length: 0
Docker-Content-Digest: <digest>

Location헤더는 허용 레이어 파일에 액세스 할 수있는 레지스트리 URL이 포함됩니다. Docker-Content-Digest헤더 제공된 다이제스트 다를 수 업로드 블롭의 정규 다이제스트를 반환한다. 대부분의 클라이언트는 값을 무시할 수 있지만 사용되는 경우 클라이언트는 업로드 된 BLOB 데이터에 대해 값을 확인해야합니다.

다이제스트 매개 변수

"digest"매개 변수는 성공적인 전송 확인을 지원하는 불투명 한 매개 변수로 설계되었습니다. 예를 들어 HTTP URI 매개 변수는 다음과 같습니다.

sha256:6c3c624b58dbbcd3c0dd82b4c53f04194d1247c6eebdaab7c610cf7d66709b3b

이 매개 변수가 주어지면 레지스트리는 제공된 내용이이 다이제스트와 일치하는지 확인합니다.

업로드 취소

업로드 엔드 포인트에 DELETE 요청을 발행하여 업로드를 취소 할 수 있습니다. 형식은 다음과 같습니다.

DELETE /v2/<name>/blobs/uploads/<uuid>

이 요청이 발행 된 후 업로드 uuid는 더 이상 유효하지 않으며 레지스트리 서버는 모든 중간 데이터를 덤프합니다. 업로드가 완료되지 않은 경우 시간 초과가되지만 클라이언트는 치명적인 오류가 발생해도 http 요청을 발행 할 수 있으면이 요청을해야합니다.

교차 저장소 브 로브 마운트

blob은 클라이언트가 읽기 액세스 권한을 가진 다른 저장소에서 마운트되어 레지스트리에 이미 알려진 BLOB를 업로드 할 필요가 없습니다. 업로드 대신 blob 마운트를 실행하려면 POST 요청을 다음 형식으로 실행해야합니다.

POST /v2/<name>/blobs/uploads/?mount=<digest>&from=<repository name>
Content-Length: 0

BLOB가 성공적으로 마운트되면 클라이언트는 다음과 같은 201 Created 응답 을 받게됩니다 .

201 Created
Location: /v2/<name>/blobs/<digest>
Content-Length: 0
Docker-Content-Digest: <digest>

Location헤더는 허용 레이어 파일에 액세스 할 수있는 레지스트리 URL이 포함됩니다. Docker-Content-Digest헤더 제공된 다이제스트 다를 수 업로드 블롭의 정규 다이제스트를 반환한다. 대부분의 클라이언트는 값을 무시할 수 있지만 사용되는 경우 클라이언트는 업로드 된 BLOB 데이터에 대해 값을 확인해야합니다.

잘못된 저장소 또는 다이제스트 인수로 인해 마운트가 실패하면 레지스트리가 표준 업로드 동작으로 돌아가고 헤더에 202 Accepted업로드 URL과 함께 를 반환합니다 Location.

202 Accepted
Location: /v2/<name>/blobs/uploads/<uuid>
Range: bytes=0-<offset>
Content-Length: 0
Docker-Upload-UUID: <uuid>

이 동작은 저장소 탑재 쿼리 매개 변수를 인식하지 못하는 이전 버전의 레지스트리와 일치합니다.

주 : 클라이언트는 blob 마운트를 지원하지 않는 레지스트리와 예상 저장소에없는 blob을 구별하기 위해 원본 저장소에 BLOB의 존재를 확인하기 위해 HEAD 요청을 발행 할 수 있습니다.

오류

502, 503 또는 504 오류가 수신되면 클라이언트는 해당 재시도 메커니즘을 준수하는 일시적인 조건으로 인해 다운로드가 계속 될 수 있다고 가정해야합니다. 다른 5xx 오류는 터미널로 처리되어야합니다.

업로드에 문제가 있으면 문제를 나타내는 4xx 오류가 반환됩니다. 4xx 응답 (위에 나온 것처럼 416 제외)을 수신하면 업로드가 실패한 것으로 간주되어 클라이언트가 적절한 조치를 취해야합니다.

업로드 URL은 영원히 사용할 수 없습니다. 업로드 uuid가 레지스트리에 알려지지 않은 경우 404 Not Found응답이 반환되고 클라이언트는 업로드 프로세스를 다시 시작해야합니다.

Deleting a Layer

해당 name및을 통해 레지스트리에서 레이어를 삭제할 수 있습니다 digest삭제 요청은 다음 요청 형식으로 발행 될 수 있습니다.

DELETE /v2/<name>/blobs/<digest>

BLOB가 존재하고 성공적으로 삭제되면 다음과 같은 응답이 발행됩니다.

202 Accepted
Content-Length: None

BLOB가 이미 삭제되었거나 존재하지 않으면 404 Not Found 응답이 대신 발행됩니다.

레지스트리의 매니페스트에서 참조하는 레이어가 삭제 된 경우 전체 이미지를 해석 할 수 없습니다.

이미지 매니페스트 푸시

이미지의 모든 레이어가 업로드되면 클라이언트는 이미지 목록을 업로드 할 수 있습니다. 다음 요청 형식을 사용하여 이미지를 푸시 할 수 있습니다.

PUT /v2/<name>/manifests/<reference>
Content-Type: <manifest media type>

{
   "name": <name>,
   "tag": <tag>,
   "fsLayers": [
      {
         "blobSum": <digest>
      },
      ...
    ]
   ],
   "history": <v1 images>,
   "signature": <JWS>,
   ...
}

name및 reference응답 본문의 필드는 URL에 지정된 일치해야합니다. reference필드는 "태그"이거나 "소화"수 있습니다. 콘텐츠 유형은 manifest-v2-1.md 및 manifest-v2-2.md에 지정된대로 업로드되는 매니페스트의 유형과 일치해야합니다 .

매니페스트를 푸는 데 문제가있는 경우 관련 4xx 응답이 JSON 오류 메시지와 함께 반환됩니다. 가능한 오류 코드에 대한 자세한 내용은 PUT Manifest 섹션을 참조하십시오.

하나 이상의 레이어가 레지스트리에 알려지지 않은 경우 BLOB_UNKNOWN오류가 반환됩니다. detail오류 응답의 필드는있을 것이다 digest누락 된 덩어리를 식별하는 필드. 알 수없는 각 blob에 대해 오류가 리턴됩니다. 응답 형식은 다음과 같습니다.

{
    "errors:" [{
            "code": "BLOB_UNKNOWN",
            "message": "blob unknown to registry",
            "detail": {
                "digest": <digest>
            }
        },
        ...
    ]
} 

Listing Repositories

이미지는 저장소 로 알려진 콜렉션에 저장 name되며, API 스펙 전체에서 볼 수 있듯이, 키가 있습니다. 레지스트리 인스턴스는 여러 저장소를 포함 할 수 있습니다. 사용 가능한 리포지토리 목록은 카탈로그를 통해 사용할 수 있습니다 .

주어진 레지스트리에 대한 카탈로그는 다음 요청으로 검색 될 수 있습니다.

GET /v2/_catalog

응답 형식은 다음과 같습니다.

200 OK
Content-Type: application/json

{
  "repositories": [
    <name>,
    ...
  ]
}

응답의 내용은 레지스트리 구현에 따라 다릅니다. 일부 레지스트리는 전체 카탈로그 출력을 제공하거나 미러링 기능을 제공하는 경우 사용자의 액세스 수준에 따라 제한하거나 업스트림 결과를 생략 할 수 있습니다. 따라서 카탈로그 목록에 저장소가있는 경우에만 레지스트리  요청시 저장소에 대한 액세스를 제공 할 수 있습니다 . 반대로 항목이 누락 되었다고해서 레지스트리에 저장소 가 없다는 의미는 아닙니다. 더 간결하게, 저장소의 존재는 그것이라고이 아닌 것을 보장 하지 있습니다.

저장소가 많은 레지스트리의 경우이 응답이 상당히 클 수 있습니다. 이러한 응답이 예상되는 경우 페이지 매김을 사용해야합니다. 레지스트리는 페이지 매김이 명시 적으로 요청되지 않은 경우에도 반환되는 응답의 양을 제한 할 수 있습니다. 이 경우 Link결과와 함께 헤더가 반환되며 페이지 순서가 처음 요청 된 것처럼 링크를 따라 후속 결과를 얻을 수 있습니다.

Link머리글에 대한 자세한 내용은 페이지 매김 섹션을 참조하십시오 .

쪽수 매기기

페이지가 매겨진 카탈로그 결과는 n요청 URL에 매개 변수를 추가하여 검색 n결과 를 결과 로 제한해야한다고 선언 하여 검색 할 수 있습니다 페이지 매김 된 흐름 시작은 다음과 같이 시작됩니다.

GET /v2/_catalog?n=<integer>

위의 예는 결과 세트를 어휘로 나열하여 결과의 ​​수를 제한하여 카탈로그 응답을 리턴하도록 지정합니다 n그러한 요청에 대한 응답은 다음과 같습니다.

200 OK
Content-Type: application/json
Link: <<url>?n=<n from the request>&last=<last repository in response>>; rel="next"

{
  "repositories": [
    <name>,
    ...
  ]
}

위 결과 집합 의 첫 번째 n 항목이 포함 됩니다. 다음 n 항목 을 얻으 려면 인수 last에 값이 있는 URL을 만들 수 있습니다 repositories[len(repositories)-1]실제로 더 많은 결과가있는 경우 다음 블록의 URL은 RFC5988 Link 헤더에 "다음"관계로 인코딩됩니다 Link헤더 의 존재는 전체 결과 세트가 리턴되지 않았고 또 다른 요청이 _ 행되어야한다는 클라이언트와 통신합니다. 헤더가 없으면 클라이언트는 모든 결과가 수신되었다고 간주 할 수 있습니다.

참고 : 위 요청 템플릿에서 대괄호가 필요하다는 것을 유의하십시오. 예를 들어, url은http://example.com/v2/_catalog?n=20&last=b헤더의 값입니다 <http://example.com/v2/_catalog?n=20&last=b>; rel="next"자세한 내용은 RFC5988 을 참조하십시오.

호환되는 클라이언트 구현은 Link결과를 선형 적으로 진행할 때 항상 헤더 값을 사용해야합니다 클라이언트는 카탈로그에서 건너 뛸 URL을 생성 할 수 있습니다.

다음 결과 세트를 얻으려면 클라이언트가 설명 된 Link헤더에 인코딩 된 URL을 사용하여 다음과 같이 요청을 발행합니다 .

GET /v2/_catalog?n=<n from the request>&last=<last repository value from previous response>

Link헤더가 더 이상 설정되지 않을 때까지 위의 프로세스를 반복해야합니다 .

카탈로그 결과 세트는 어휘 적으로 정렬 된 목록으로 추상적으로 표현되며, 목록의 위치는 질의 용어로 지정할 수 있습니다 last응답의 항목은 ~로 지정된 용어 다음 에 시작 됩니다.lastn

last예를 들어 설명 할 때 의 동작 은 매우 간단합니다. 레지스트리에 다음과 같은 리포지토리가 있다고 가정 해 보겠습니다.

a
b
c
d

의 값이있는 경우 n인 2 및 B는 상기 제 1 응답을 반환한다. 응답에 반환 헤더는 것 2 마지막 세트로 설정 B :Linkn

Link: <<url>?n=2&last=b>; rel="next"

그런 다음 클라이언트는 Link 헤더 에서 위의 값을 사용하여 c 및 d 값을 수신하여 요청을 발행 할 수 있습니다 주 n마지막 응답 제에 따라 변경 될 수 있거나 완전히 서버 구현에 따라 생략한다.

Listing Image Tags

주어진 저장소 아래에 모든 태그를 나열해야 할 수도 있습니다. 이미지 저장소의 태그는 다음 요청으로 검색 할 수 있습니다.

GET /v2/<name>/tags/list

응답 형식은 다음과 같습니다.

200 OK
Content-Type: application/json

{
    "name": <name>,
    "tags": [
        <tag>,
        ...
    ]
}

많은 수의 태그가있는 리포지토리의 경우이 응답은 상당히 클 수 있습니다. 그러한 응답이 예상되면 페이지 매김을 사용해야합니다.

쪽수 매기기

페이지 매김 태그 결과는 위에 설명 된 요청 URL에 적절한 매개 변수를 추가하여 검색 할 수 있습니다. 태그 페이지 매김의 동작은 카탈로그 페이지 매김에 지정된 동작과 동일합니다. 우리는 차이점을 강조하기위한 간단한 흐름을 다룹니다.

페이지 매김 된 플로우의 시작은 다음과 같이 시작될 수 있습니다.

GET /v2/<name>/tags/list?n=<integer>

위의 예는 결과 세트의 시작부터 어휘 적으로 순서화 된 태그 응답을 반환하도록 지정하여 결과의 ​​수를 제한합니다 n그러한 요청에 대한 응답은 다음과 같습니다.

200 OK
Content-Type: application/json
Link: <<url>?n=<n from the request>&last=<last tag value from previous response>>; rel="next"

{
  "name": <name>,
  "tags": [
    <tag>,
    ...
  ]
}

다음 결과 세트를 얻으려면 클라이언트가 RFC5988 Link 헤더에 인코딩 된 값을 사용하여 다음과 같이 요청을 발행합니다 .

GET /v2/<name>/tags/list?n=<n from the request>&last=<last tag value from previous response>

The above process should then be repeated until the Link header is no longer set in the response. The behavior of the lastparameter, the provided response result, lexical ordering and encoding of the Link header are identical to that of catalog pagination.

Deleting an Image

An image may be deleted from the registry via its name and reference. A delete may be issued with the following request format:

DELETE /v2/<name>/manifests/<reference>

For deletes, reference must be a digest or the delete will fail. If the image exists and has been successfully deleted, the following response will be issued:

202 Accepted
Content-Length: None

If the image had already been deleted or did not exist, a 404 Not Found response will be issued instead.

Note When deleting a manifest from a registry version 2.3 or later, the following header must be used when HEAD or GET-ing the manifest to obtain the correct digest to delete:

Accept: application/vnd.docker.distribution.manifest.v2+json

for more details, see: compatibility.md

Detail

참고 :이 섹션은 아직 작성 중입니다. 이행을 위해 아래의 세부 사항이 위에서 설명한 요청 흐름과 다른 경우 아래 섹션을 수정해야합니다. 일치하면이 메모를 삭제해야합니다.

끝점의 동작은이 섹션에서 경로 및 엔터티로 구성되어 자세히 설명됩니다. 헤더, 매개 변수 및 본문 형식을 포함하여 요청 및 응답의 모든 측면을 다룹니다. 요청 및 성공 및 실패와 함께 대응하는 응답의 예가 열거됩니다.

 : 엔드 포인트 세부 사항의 섹션은 예제 요청, 요청 설명, 그 요청에 대한 정보 순으로 정렬됩니다.

메소드 및 URI 목록은 아래 표에 나와 있습니다.

방법통로실재기술
GET/v2/베이스엔드 포인트가 Docker Registry API V2를 구현하는지 확인하십시오.
GET/v2/<name>/tags/list태그에 의해 식별 된 저장소 아래에 태그를 가져옵니다 name.
GET/v2/<name>/manifests/<reference>명백한에 의해 식별 된 매니페스트를 가져 name오고 reference어디 reference에서 태그 또는 다이제스트가 될 수 있습니다. HEAD요청이 모든 데이터를 수신하지 않고 자원 정보를 획득하기 위해,이 엔드 포인트에 발행 할 수있다.
PUT/v2/<name>/manifests/<reference>명백한에 의해 확인 된 매니페스트를 넣어 name및 reference곳 reference태그를 수 또는 소화 할 수 있습니다.
DELETE/v2/<name>/manifests/<reference>명백한nameand로 식별 된 매니페스트를 삭제하십시오 reference매니페스트는에 의해서만 삭제 될 수 있습니다 digest.
GET/v2/<name>/blobs/<digest>얼룩에 의해 식별 된 레지스트리에서 BLOB를 검색하십시오 digestHEAD요청이 모든 데이터를 수신하지 않고 자원 정보를 획득하기 위해,이 엔드 포인트에 발행 할 수있다.
DELETE/v2/<name>/blobs/<digest>얼룩블롭에 의해 확인 삭제 namedigest
POST/v2/<name>/blobs/uploads/블롭 업로드 시작재개 가능한 BLOB 업로드를 시작하십시오. 업로드가 완료되면 업로드 위치가 제공되어 업로드가 완료됩니다. 선택적으로 digest매개 변수가 있으면 요청 본문이 단일 요청으로 업로드를 완료하는 데 사용됩니다.
GET/v2/<name>/blobs/uploads/<uuid>블롭 업로드에 의해 식별 된 업로드 상태 검색 uuid이 엔드 포인트의 주요 목적은 재개 가능한 업로드의 현재 상태를 해결하는 것입니다.
PATCH/v2/<name>/blobs/uploads/<uuid>블롭 업로드지정된 업로드에 대한 데이터 청크 업로드
PUT/v2/<name>/blobs/uploads/<uuid>블롭 업로드에 의해 지정된 업로드를 완료하고 uuid선택적으로 본문을 최종 청크로 추가합니다.
DELETE/v2/<name>/blobs/uploads/<uuid>블롭 업로드미해결의 업로드 프로세스를 취소하고 관련 자원을 릴리스하십시오. 이것이 호출되지 않으면, 끝나지 않은 업로드가 결국 타임 아웃됩니다.
GET/v2/_catalog목록레지스트리에서 사용할 수있는 정렬 된 정렬 된 json 목록을 검색하십시오.

각 엔드 포인트에 대한 세부 사항은 다음 절에서 다룹니다.

오류

API를 통해 발생한 오류 코드는 다음 표에서 열거됩니다.

암호메시지기술
BLOB_UNKNOWN레지스트리에 알려지지 않은 blob이 오류는 blob이 지정된 저장소의 레지스트리에 알려지지 않은 경우 리턴 될 수 있습니다.이것은 표준 get과 함께 반환되거나 매니페스트가 업로드 중에 알 수없는 레이어를 참조하는 경우 반환 될 수 있습니다.
BLOB_UPLOAD_INVALID얼룩 업로드 잘못되었습니다.BLOB 업로드에 오류가 발생하여 더 이상 진행할 수 없습니다.
BLOB_UPLOAD_UNKNOWN레지스트리에 blob 업로드 알 수 없음BLOB 업로드가 취소되었거나 시작되지 않은 경우이 오류 코드가 반환 될 수 있습니다.
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.
MANIFEST_BLOB_UNKNOWN레지스트리에 알려지지 않은 blob매니페스트 blob이 레지스트리에 알려지지 않은 경우이 오류가 반환 될 수 있습니다.
MANIFEST_INVALID매니 페스트가 유효하지 않음업로드하는 동안 매니페스트는 유효성을 확인하는 몇 가지 검사를 거칩니다. 이러한 검사가 실패하면보다 구체적인 오류가 포함되어 있지 않으면이 오류가 반환 될 수 있습니다. 세부 정보에는 실패한 유효성 검사에 대한 정보가 포함됩니다.
MANIFEST_UNKNOWN알 수없는 명부이름 및 태그로 식별 된 매니페스트가 저장소에서 알 수없는 경우이 오류가 반환됩니다.
MANIFEST_UNVERIFIED서명 검증에 실패했다매니페스트 업로드 중에 매니페스트가 서명 확인에 실패하면이 오류가 반환됩니다.
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.
SIZE_INVALID제공된 길이가 콘텐츠 길이와 일치하지 않습니다.레이어가 업로드되면 제공된 크기가 업로드 된 내용과 비교하여 검사됩니다. 일치하지 않으면이 오류가 리턴됩니다.
TAG_INVALID매니페스트 태그가 URI와 일치하지 않습니다.매니페스트 업로드 중에 매니페스트의 태그가 uri 태그와 일치하지 않으면이 오류가 반환됩니다.
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.
UNSUPPORTED작업이 지원되지 않습니다.구현이 누락되었거나 잘못된 매개 변수 집합으로 인해 작업이 지원되지 않았습니다.

베이스

기본 V2 API 경로. 일반적으로이 기능은 경량 버전 확인 및 레지스트리 인증의 유효성 검사에 사용할 수 있습니다.

GET BASE

엔드 포인트가 Docker Registry API V2를 구현하는지 확인하십시오.

GET /v2/
Host: <registry host>
Authorization: <scheme> <token>

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.

성공시 : OK

200 OK

API는 V2 프로토콜을 구현하며 액세스 할 수 있습니다.

실패시 : 찾을 수 없음

404 Not Found

레지스트리는 V2 API를 구현하지 않습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

태그

태그에 대한 정보를 검색하십시오.

GET 태그

에 의해 식별 된 저장소 아래에 태그를 가져옵니다 name.

태그

GET /v2/<name>/tags/list
Host: <registry host>
Authorization: <scheme> <token>

저장소의 모든 태그를 반환합니다.

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.

성공시 : OK

200 OK
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
    "name": <name>,
    "tags": [
        <tag>,
        ...
    ]
}

명명 된 저장소의 태그 목록입니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

태그가 지정된 태그

GET /v2/<name>/tags/list?n=<integer>&last=<integer>

지정된 리포지터리 (repository)의 태그의 일부를 돌려줍니다.

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
name통로대상 저장소의 이름.
n질문각 응답의 항목 수를 제한하십시오. 존재하지 않으면 모든 항목이 리턴됩니다.
last질문결과 집합에는 어휘 적으로 값이 포함됩니다.

성공시 : OK

200 OK
Content-Length: <length>
Link: <<url>?n=<last n value>&last=<last entry from response>>; rel="next"
Content-Type: application/json; charset=utf-8

{
    "name": <name>,
    "tags": [
        <tag>,
        ...
    ],
}

명명 된 저장소의 태그 목록입니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.
LinkRFC5988 준수 rel = 다음 결과 집합에 대한 URL로 'next'(사용 가능한 경우)

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

명백한

매니페스트를 생성, 업데이트, 삭제 및 검색합니다.

GET MANIFEST

에 의해 식별 된 매니페스트를 가져 name오고 reference어디 reference에서 태그 또는 다이제스트가 될 수 있습니다. HEAD요청이 모든 데이터를 수신하지 않고 자원 정보를 획득하기 위해,이 엔드 포인트에 발행 할 수있다.

GET /v2/<name>/manifests/<reference>
Host: <registry host>
Authorization: <scheme> <token>

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.
reference통로타겟 매니페스트의 태그 또는 다이제스트.

성공시 : OK

200 OK
Docker-Content-Digest: <digest>
Content-Type: <media type of manifest>

{
   "name": <name>,
   "tag": <tag>,
   "fsLayers": [
      {
         "blobSum": "<digest>"
      },
      ...
    ]
   ],
   "history": <v1 images>,
   "signature": <JWS>
}

매니페스트에 의해 확인 namereference . 내용을 사용하여 지정된 이미지를 실행하는 데 필요한 자원을 식별하고 해결할 수 있습니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Docker-Content-Digest요청 된 대상 콘텐츠의 요약입니다.

실패시 : 잘못된 요청

400 Bad Request
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

이름이나 참조가 잘못되었습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
TAG_INVALID매니페스트 태그가 URI와 일치하지 않습니다.매니페스트 업로드 중에 매니페스트의 태그가 uri 태그와 일치하지 않으면이 오류가 반환됩니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

PUT MANIFEST

에 의해 확인 된 매니페스트를 넣어 name및 reference곳 reference태그를 수 또는 소화 할 수 있습니다.

PUT /v2/<name>/manifests/<reference>
Host: <registry host>
Authorization: <scheme> <token>
Content-Type: <media type of manifest>

{
   "name": <name>,
   "tag": <tag>,
   "fsLayers": [
      {
         "blobSum": "<digest>"
      },
      ...
    ]
   ],
   "history": <v1 images>,
   "signature": <JWS>
}

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.
reference통로타겟 매니페스트의 태그 또는 다이제스트.

성공시 : 생성됨

201 Created
Location: <url>
Content-Length: 0
Docker-Content-Digest: <digest>

매니페스트는 레지스트리에서 수락되었으며 지정된 name및 아래에 저장됩니다.tag .

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Location업로드 된 매니페스트의 표준 위치 URL입니다.
Content-LengthContent-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
Docker-Content-Digest요청 된 대상 콘텐츠의 요약입니다.

실패시 : Invalid Manifest

400 Bad Request
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

수신 된 매니페스트는 오류 코드에 설명 된대로 어떤 식 으로든 잘못되었습니다. 클라이언트가 문제를 해결하고 요청을 다시 시도해야합니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
TAG_INVALID매니페스트 태그가 URI와 일치하지 않습니다.매니페스트 업로드 중에 매니페스트의 태그가 uri 태그와 일치하지 않으면이 오류가 반환됩니다.
MANIFEST_INVALID매니 페스트가 유효하지 않음업로드하는 동안 매니페스트는 유효성을 확인하는 몇 가지 검사를 거칩니다. 이러한 검사가 실패하면보다 구체적인 오류가 포함되어 있지 않으면이 오류가 반환 될 수 있습니다. 세부 정보에는 실패한 유효성 검사에 대한 정보가 포함됩니다.
MANIFEST_UNVERIFIED서명 검증에 실패했다매니페스트 업로드 중에 매니페스트가 서명 확인에 실패하면이 오류가 반환됩니다.
BLOB_UNKNOWN레지스트리에 알려지지 않은 blob이 오류는 blob이 지정된 저장소의 레지스트리에 알려지지 않은 경우 리턴 될 수 있습니다.이것은 표준 get과 함께 반환되거나 매니페스트가 업로드 중에 알 수없는 레이어를 참조하는 경우 반환 될 수 있습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

실패시 : 누락 된 레이어 (들)

400 Bad Request
Content-Type: application/json; charset=utf-8

{
    "errors:" [{
            "code": "BLOB_UNKNOWN",
            "message": "blob unknown to registry",
            "detail": {
                "digest": "<digest>"
            }
        },
        ...
    ]
}

매니페스트 업로드 중에 하나 이상의 레이어가 누락되었을 수 있습니다. 그렇다면 누락 된 레이어가 오류 응답에 열거됩니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
BLOB_UNKNOWN레지스트리에 알려지지 않은 blob이 오류는 blob이 지정된 저장소의 레지스트리에 알려지지 않은 경우 리턴 될 수 있습니다. 이것은 표준 get과 함께 반환되거나 매니페스트가 업로드 중에 알 수없는 레이어를 참조하는 경우 반환 될 수 있습니다.

실패시 : 허용되지 않음

405 Method Not Allowed

레지스트리가 풀다운 캐시로 구성되었거나 다른 이유로 인해 매니페스트 풋이 허용되지 않습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNSUPPORTED작업이 지원되지 않습니다.구현이 누락되었거나 잘못된 매개 변수 집합으로 인해 작업이 지원되지 않았습니다.

매니페스트 삭제

nameand로 식별 된 매니페스트를 삭제하십시오 reference매니페스트는에 의해서만 삭제 될 수 있습니다 digest.

DELETE /v2/<name>/manifests/<reference>
Host: <registry host>
Authorization: <scheme> <token>

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.
reference통로타겟 매니페스트의 태그 또는 다이제스트.

성공시 : 수락 됨

202 Accepted

실패시 : 잘못된 이름 또는 참조

400 Bad Request
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

지정된 name또는reference 유효하지 않아 삭제를 진행할 수 없습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
TAG_INVALID매니페스트 태그가 URI와 일치하지 않습니다.매니페스트 업로드 중에 매니페스트의 태그가 uri 태그와 일치하지 않으면이 오류가 반환됩니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

실패시 : 알 수없는 Manifest

404 Not Found
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

레지스트리에 지정 되지 않았 name거나 reference알 수 없으며 삭제를 진행할 수 없습니다. 클라이언트는이 응답이 반환되면 매니페스트가 이미 삭제 된 것으로 간주 할 수 있습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.
MANIFEST_UNKNOWN알 수없는 명부이름 및 태그로 식별 된 매니페스트가 저장소에서 알 수없는 경우이 오류가 반환됩니다.

실패시 : 허용되지 않음

405 Method Not Allowed

레지스트리가 풀다운 캐시로 구성 delete되었거나 비활성화 된 상태 이므로 매니페스트 삭제가 허용되지 않습니다 .

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNSUPPORTED작업이 지원되지 않습니다.구현이 누락되었거나 잘못된 매개 변수 집합으로 인해 작업이 지원되지 않았습니다.

얼룩

name및로 식별되는 얼룩에 대한 작업 digest다이제스트로 레이어를 가져 오거나 삭제하는 데 사용됩니다.

블롭 가져 오기

에 의해 식별 된 레지스트리에서 BLOB를 검색하십시오 digest에이HEAD요청이 모든 데이터를 수신하지 않고 자원 정보를 획득하기 위해,이 엔드 포인트에 발행 할 수있다.

블랍 가져 오기

GET /v2/<name>/blobs/<digest>
Host: <registry host>
Authorization: <scheme> <token>

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.
digest통로원하는 BLOB 다이제스트.

성공시 : OK

200 OK
Content-Length: <length>
Docker-Content-Digest: <digest>
Content-Type: application/octet-stream

<blob binary data>

에 의해 식별 된 얼룩 digest 사용 가능합니다. 얼룩 내용은 요청 본문에 표시됩니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Content-Length요청 된 BLOB 내용의 길이입니다.
Docker-Content-Digest요청 된 대상 콘텐츠의 요약입니다.

성공시 : 임시 리디렉션

307 Temporary Redirect
Location: <blob location>
Docker-Content-Digest: <digest>

에 의해 식별 된 얼룩 digest은 제공된 위치에서 사용할 수 있습니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Location레이어에 액세스 할 수있는 위치입니다.
Docker-Content-Digest요청 된 대상 콘텐츠의 요약입니다.

실패시 : 잘못된 요청

400 Bad Request
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

올바르지 name않거나 유효하지 않은 요청과 같이 클라이언트가 해결해야하는 요청에 문제가 있습니다 tag.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.

실패시 : 찾을 수 없음

404 Not Found
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

name및로 식별되는 얼룩digest 은 레지스트리에 알려지지 않습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.
BLOB_UNKNOWN레지스트리에 알려지지 않은 blob이 오류는 blob이 지정된 저장소의 레지스트리에 알려지지 않은 경우 리턴 될 수 있습니다. 이것은 표준 get과 함께 반환되거나 매니페스트가 업로드 중에 알 수없는 레이어를 참조하는 경우 반환 될 수 있습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

얼룩 부분 가져 오기

GET /v2/<name>/blobs/<digest>
Host: <registry host>
Authorization: <scheme> <token>
Range: bytes=<start>-<end>

이 종점은 RFC7233 호환 범위 요청을 지원할 수도 있습니다. 지원은 HEAD 요청을 발행하여 감지 할 수 있습니다. 헤더 Accept-Range: bytes가 반환되면 부분 요청을 가져 오는 데 범위 요청을 사용할 수 있습니다.

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
Range머리글BLOB 청크를 지정하는 HTTP 범위 헤더입니다.
name통로대상 저장소의 이름.
digest통로원하는 BLOB 다이제스트.

성공시 : 부분 콘텐츠

206 Partial Content
Content-Length: <length>
Content-Range: bytes <start>-<end>/<size>
Content-Type: application/octet-stream

<blob binary data>

에 의해 식별 된 얼룩 digest 사용 가능합니다. 지정된 Blob 내용 청크가 요청 본문에 표시됩니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Content-Length요청 된 BLOB 청크의 길이.
Content-RangeBLOB 청크의 콘텐츠 범위.

실패시 : 잘못된 요청

400 Bad Request
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

올바르지 name않거나 유효하지 않은 요청과 같이 클라이언트가 해결해야하는 요청에 문제가 있습니다 tag.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.

실패시 : 찾을 수 없음

404 Not Found
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.
BLOB_UNKNOWN레지스트리에 알려지지 않은 blob이 오류는 blob이 지정된 저장소의 레지스트리에 알려지지 않은 경우 리턴 될 수 있습니다. 이것은 표준 get과 함께 반환되거나 매니페스트가 업로드 중에 알 수없는 레이어를 참조하는 경우 반환 될 수 있습니다.

실패시 : 요청 된 범위가 만족스럽지 않음

416 Requested Range Not Satisfiable

요청한 콘텐츠에 대해 범위 지정을 만족시킬 수 없습니다. 범위가 올바르게 형식이 지정되지 않았거나 범위가 콘텐츠의 유효한 크기를 벗어난 경우 이러한 현상이 발생할 수 있습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

BLOB 삭제

블롭에 의해 확인 삭제 namedigest

DELETE /v2/<name>/blobs/<digest>
Host: <registry host>
Authorization: <scheme> <token>

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.
digest통로원하는 BLOB 다이제스트.

성공시 : 수락 됨

202 Accepted
Content-Length: 0
Docker-Content-Digest: <digest>

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Content-Length0
Docker-Content-Digest요청 된 대상 콘텐츠의 요약입니다.

실패시 : 잘못된 이름 또는 다이제스트

400 Bad Request

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.

실패시 : 찾을 수 없음

404 Not Found
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

블롭, 식별 namedigest 은 레지스트리에 알려지지 않습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.
BLOB_UNKNOWN레지스트리에 알려지지 않은 blob이 오류는 blob이 지정된 저장소의 레지스트리에 알려지지 않은 경우 리턴 될 수 있습니다. 이것은 표준 get과 함께 반환되거나 매니페스트가 업로드 중에 알 수없는 레이어를 참조하는 경우 반환 될 수 있습니다.

실패시 : 메소드가 허용되지 않음

405 Method Not Allowed
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

레지스트리가 풀다운 캐시로 구성 delete되었거나 비활성화 된 상태 이므로 블롭 삭제가 허용되지 않습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNSUPPORTED작업이 지원되지 않습니다.구현이 누락되었거나 잘못된 매개 변수 집합으로 인해 작업이 지원되지 않았습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

블롭 업로드 시작

BLOB 업로드를 시작하십시오. 이 끝점은 재개 가능한 업로드 또는 단일 업로드를 만드는 데 사용할 수 있습니다.

POST가 BLOB 업로드를 시작합니다.

재개 가능한 BLOB 업로드를 시작하십시오. 업로드가 완료되면 업로드 위치가 제공되어 업로드가 완료됩니다. 선택적으로 digest매개 변수가 있으면 요청 본문이 단일 요청으로 업로드를 완료하는 데 사용됩니다.

모 놀리 식 블롭 업로드 시작

POST /v2/<name>/blobs/uploads/?digest=<digest>
Host: <registry host>
Authorization: <scheme> <token>
Content-Length: <length of blob>
Content-Type: application/octect-stream

<binary data>

digest단일 요청 에서 매개 변수로 식별 된 BLOB를 업로드합니다 이 업로드는 복구 할 수있는 오류가 반환되지 않는 이상 재개 할 수 없습니다.

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
Content-Length머리글 
name통로대상 저장소의 이름.
digest질문업로드 된 BLOB의 다이제스트. 존재하는 경우 업로드는 단일 요청으로 결과 본문의 내용과 함께 완료됩니다.

성공시 : 생성됨

201 Created
Location: <blob location>
Content-Length: 0
Docker-Upload-UUID: <uuid>

BLOB는 레지스트리에 생성되었으며 제공된 위치에서 사용할 수 있습니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Location 
Content-LengthContent-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
Docker-Upload-UUID현재 요청에 대한 docker 업로드 uuid를 식별합니다.

실패시 : 잘못된 이름 또는 다이제스트

400 Bad Request

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.

실패시 : 허용되지 않음

405 Method Not Allowed

레지스트리가 풀 스루 캐시로 구성되었거나 다른 이유로 인해 Blob 업로드가 허용되지 않습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNSUPPORTED작업이 지원되지 않습니다.구현이 누락되었거나 잘못된 매개 변수 집합으로 인해 작업이 지원되지 않았습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

재개 가능한 Blob 업로드 시작

POST /v2/<name>/blobs/uploads/
Host: <registry host>
Authorization: <scheme> <token>
Content-Length: 0

빈 요청 본문을 가진 재개 가능한 BLOB 업로드를 시작하십시오.

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
Content-Length머리글Content-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
name통로대상 저장소의 이름.

성공시 : 수락 됨

202 Accepted
Content-Length: 0
Location: /v2/<name>/blobs/uploads/<uuid>
Range: 0-0
Docker-Upload-UUID: <uuid>

업로드가 생성되었습니다. Location헤더는 업로드를 완료해야합니다. 응답은 GET반환 된 내용에 대한 요청 과 동일해야합니다.Location 헤더 .

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Content-LengthContent-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
Location생성 된 업로드 위치입니다. 클라이언트는 업로드를 완료하고 필요한 경우 매개 변수를 추가하기 위해 내용을 축 어적으로 사용해야합니다.
Range업로드 진행 상황을 나타내는 범위 헤더입니다. 업로드를 시작하면 콘텐츠가 수신되지 않으므로 빈 범위가 반환됩니다.
Docker-Upload-UUID현재 요청에 대한 docker 업로드 uuid를 식별합니다.

실패시 : 잘못된 이름 또는 다이제스트

400 Bad Request

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

마운트 블롭

POST /v2/<name>/blobs/uploads/?mount=<digest>&from=<repository name>
Host: <registry host>
Authorization: <scheme> <token>
Content-Length: 0

마운트에 의해 식별 된 얼룩 mount다른 저장소 매개 변수로 .

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
Content-Length머리글Content-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
name통로대상 저장소의 이름.
mount질문소스 저장소에서 마운트 할 blob의 다이제스트.
from질문소스 저장소의 이름.

성공시 : 생성됨

201 Created
Location: <blob location>
Content-Length: 0
Docker-Upload-UUID: <uuid>

BLOB는 저장소에 마운트되었으며 제공된 위치에서 사용할 수 있습니다.

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Location 
Content-LengthContent-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
Docker-Upload-UUID현재 요청에 대한 docker 업로드 uuid를 식별합니다.

실패시 : 잘못된 이름 또는 다이제스트

400 Bad Request

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.

실패시 : 허용되지 않음

405 Method Not Allowed

레지스트리가 풀다운 캐시로 구성되었거나 다른 이유로 인해 Blob 마운트가 허용되지 않습니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNSUPPORTED작업이 지원되지 않습니다.구현이 누락되었거나 잘못된 매개 변수 집합으로 인해 작업이 지원되지 않았습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

블롭 업로드

BLOB 업로드와 상호 작용합니다. 클라이언트는이 끝점에 대한 URL을 절대로 조합해서는 안되며 Location관련 API 요청 의 헤더를 통해서만 가져와야합니다. 그만큼Location헤더 및 해당 매개 변수는 업로드 관련 API 호출을 통해 반환 된 최신 값을 사용하여, 클라이언트에 의해 보존되어야한다.

블롭 업로드하기

에 의해 식별 된 업로드 상태 검색 uuid이 엔드 포인트의 주요 목적은 재개 가능한 업로드의 현재 상태를 해결하는 것입니다.

GET /v2/<name>/blobs/uploads/<uuid>
Host: <registry host>
Authorization: <scheme> <token>

에서 업로드 한 현재 업로드 진행률을 가져옵니다. Range헤더에 .

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.
uuid통로업로드를 식별하는 uuid. 이 필드는 일치하는 문자를 허용 할 수 있습니다 [a-zA-Z0-9-_.=]+.

성공시 : 업로드 진행

204 No Content
Range: 0-<offset>
Content-Length: 0
Docker-Upload-UUID: <uuid>

업로드가 알려져 있고 진행 중입니다. 마지막으로 수신 된 오프셋은Range헤더 .

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Range업로드의 현재 진행 상태를 나타내는 범위.
Content-LengthContent-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
Docker-Upload-UUID현재 요청에 대한 docker 업로드 uuid를 식별합니다.

실패시 : 잘못된 요청

400 Bad Request
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

업로드를 처리하는 중에 오류가 발생했으며 다시 시작해야합니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
BLOB_UPLOAD_INVALID얼룩 업로드 잘못되었습니다.BLOB 업로드에 오류가 발생하여 더 이상 진행할 수 없습니다.

실패시 : 찾을 수 없음

404 Not Found
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

업로드가 레지스트리에 알려지지 않았습니다. 업로드를 다시 시작해야합니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
BLOB_UPLOAD_UNKNOWN레지스트리에 blob 업로드 알 수 없음BLOB 업로드가 취소되었거나 시작되지 않은 경우이 오류 코드가 반환 될 수 있습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
TOOMANYREQUESTS너무 많은 요청클라이언트가 서비스에 너무 자주 접촉하려고 시도 할 때 반환됩니다.

패치 블롭 ​​업로드

지정된 업로드에 대한 데이터 청크 업로드

스트림 업로드

PATCH /v2/<name>/blobs/uploads/<uuid>
Host: <registry host>
Authorization: <scheme> <token>
Content-Type: application/octet-stream

<binary data>

업로드를 완료하지 않고 업로드 할 데이터 스트림을 업로드하십시오.

요청시 다음 매개 변수를 지정해야합니다.

이름종류기술
Host머리글표준 HTTP 호스트 헤더. 레지스트리 호스트로 설정해야합니다.
Authorization머리글RFC7235 호환 승인 헤더.
name통로대상 저장소의 이름.
uuid통로업로드를 식별하는 uuid. 이 필드는 일치하는 문자를 허용 할 수 있습니다 [a-zA-Z0-9-_.=]+.

성공시 : 데이터 허용

204 No Content
Location: /v2/<name>/blobs/uploads/<uuid>
Range: 0-<offset>
Content-Length: 0
Docker-Upload-UUID: <uuid>

데이터 스트림이 승인되었으며 현재 진행률이 범위 헤더에서 사용 가능합니다. 업데이트 된 업로드 위치는 Location헤더 에서 사용할 수 있습니다 .

다음 헤더가 응답과 함께 반환됩니다.

이름기술
Location업로드 위치입니다. 클라이언트는 각 요청 후에 변경 사항을 가정해야합니다. 클라이언트는 업로드를 완료하고 필요한 경우 매개 변수를 추가하기 위해 내용을 축 어적으로 사용해야합니다.
Range업로드의 현재 진행 상태를 나타내는 범위.
Content-LengthContent-Length헤더는 0이어야하고, 몸은 비어 있어야합니다.
Docker-Upload-UUID현재 요청에 대한 docker 업로드 uuid를 식별합니다.

실패시 : 잘못된 요청

400 Bad Request
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

업로드를 처리하는 중에 오류가 발생했으며 다시 시작해야합니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DIGEST_INVALID제공된 다이제스트가 업로드 된 콘텐츠와 일치하지 않음BLOB가 업로드되면 레지스트리는 클라이언트가 제공 한 다이제스트와 내용이 일치하는지 확인합니다. 오류에는 잘못된 다이제스트 문자열을 포함하여 "digest"키가있는 세부 구조가 포함될 수 있습니다. 이 오류는 매니페스트에 잘못된 레이어 다이제스트가 포함되어있는 경우에도 반환 될 수 있습니다.
NAME_INVALID잘못된 저장소 이름매니페스트 유효성 검사 또는 API 작업 중에 유효하지 않은 저장소 이름이 있습니다.
BLOB_UPLOAD_INVALID얼룩 업로드 잘못되었습니다.BLOB 업로드에 오류가 발생하여 더 이상 진행할 수 없습니다.

실패시 : 찾을 수 없음

404 Not Found
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

업로드가 레지스트리에 알려지지 않았습니다. 업로드를 다시 시작해야합니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
BLOB_UPLOAD_UNKNOWN레지스트리에 blob 업로드 알 수 없음BLOB 업로드가 취소되었거나 시작되지 않은 경우이 오류 코드가 반환 될 수 있습니다.

실패시 : 인증 필요

401 Unauthorized
WWW-Authenticate: <scheme> realm="<realm>", ..."
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 인증되지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
WWW-AuthenticateRFC7235 호환 인증 챌린지 헤더.
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
UNAUTHORIZED인증 필요액세스 컨트롤러가 클라이언트를 인증 할 수 없습니다. 종종 이것은 인증 방법을 나타내는 Www-Authenticate HTTP 응답 헤더가 수반됩니다.

실패시 : 해당 저장소 오류 없음

404 Not Found
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

저장소가 레지스트리에 알려지지 않았습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
NAME_UNKNOWN레지스트리에 알 수없는 저장소 이름조작 중에 사용 된 이름을 레지스트리에 알려지지 않은 경우 리턴됩니다.

실패시 : 액세스 거부

403 Forbidden
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트는 저장소에 대한 필수 액세스 권한이 없습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.

응답 본문에 포함될 수있는 오류 코드는 다음과 같이 열거됩니다.

암호메시지기술
DENIED리소스에 대한 요청 된 액세스가 거부되었습니다.액세스 컨트롤러가 리소스에 대한 작업에 대한 액세스를 거부했습니다.

실패시 : 요청이 너무 많습니다.

429 Too Many Requests
Content-Length: <length>
Content-Type: application/json; charset=utf-8

{
	"errors:" [
	    {
            "code": <error code>,
            "message": "<error message>",
            "detail": ...
        },
        ...
    ]
}

클라이언트가 일정 시간 내에 너무 많은 요청을 보냈습니다.

다음 헤더가 응답에 반환됩니다.

이름기술
Content-LengthJSON 응답 본문의 길이입니다.