diff --git a/Makefile b/Makefile index c9c3b2f75..d6c7d442a 100644 --- a/Makefile +++ b/Makefile @@ -267,7 +267,7 @@ package_offline: compile build modify_composefile @cp NOTICE $(HARBORPKG)/NOTICE @echo "pulling nginx and registry..." - @$(DOCKERPULL) registry:2.5.0 + @$(DOCKERPULL) registry:2.5.1 @$(DOCKERPULL) nginx:1.11.5 @echo "saving harbor docker image" @@ -276,7 +276,7 @@ package_offline: compile build modify_composefile $(DOCKERIMAGENAME_LOG):$(VERSIONTAG) \ $(DOCKERIMAGENAME_DB):$(VERSIONTAG) \ $(DOCKERIMAGENAME_JOBSERVICE):$(VERSIONTAG) \ - nginx:1.11.5 registry:2.5.0 photon:1.0 + nginx:1.11.5 registry:2.5.1 photon:1.0 @$(TARCMD) -zcvf harbor-offline-installer-$(VERSIONTAG).tgz \ --exclude=$(HARBORPKG)/common/db --exclude=$(HARBORPKG)/common/config\ @@ -334,7 +334,7 @@ cleanimage: - $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_DB):$(VERSIONTAG) - $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_JOBSERVICE):$(VERSIONTAG) - $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_LOG):$(VERSIONTAG) -# - $(DOCKERRMIMAGE) -f registry:2.5.0 +# - $(DOCKERRMIMAGE) -f registry:2.5.1 # - $(DOCKERRMIMAGE) -f nginx:1.11.5 cleandockercomposefile: diff --git a/docs/user_guide.md b/docs/user_guide.md index 168fb4cec..e02412748 100644 --- a/docs/user_guide.md +++ b/docs/user_guide.md @@ -191,14 +191,14 @@ Run the below commands on the host which Harbor is deployed on to preview what f ```sh $ docker-compose stop -$ docker run -it --name gc --rm --volumes-from registry registry:2.5.0 garbage-collect --dry-run /etc/registry/config.yml +$ docker run -it --name gc --rm --volumes-from registry registry:2.5.1 garbage-collect --dry-run /etc/registry/config.yml ``` **NOTE:** The above option "--dry-run" will print the progress without removing any data. Verify the result of the above test, then use the below commands to perform garbage collection and restart Harbor. ```sh -$ docker run -it --name gc --rm --volumes-from registry registry:2.5.0 garbage-collect /etc/registry/config.yml +$ docker run -it --name gc --rm --volumes-from registry registry:2.5.1 garbage-collect /etc/registry/config.yml $ docker-compose start ``` diff --git a/make/dev/docker-compose.yml b/make/dev/docker-compose.yml index 1d8e9f858..33c7f2be3 100644 --- a/make/dev/docker-compose.yml +++ b/make/dev/docker-compose.yml @@ -10,7 +10,7 @@ services: ports: - 1514:514 registry: - image: library/registry:2.5.0 + image: library/registry:2.5.1 restart: always volumes: - /data/registry:/storage diff --git a/make/docker-compose.tpl b/make/docker-compose.tpl index dfe1cc8e9..ac6c33d71 100644 --- a/make/docker-compose.tpl +++ b/make/docker-compose.tpl @@ -9,7 +9,7 @@ services: ports: - 1514:514 registry: - image: library/registry:2.5.0 + image: library/registry:2.5.1 container_name: registry restart: always volumes: diff --git a/src/vendor/github.com/docker/distribution/manifest/schema2/builder.go b/src/vendor/github.com/docker/distribution/manifest/schema2/builder.go index ec0bf858d..44b94eaae 100644 --- a/src/vendor/github.com/docker/distribution/manifest/schema2/builder.go +++ b/src/vendor/github.com/docker/distribution/manifest/schema2/builder.go @@ -46,9 +46,6 @@ func (mb *builder) Build(ctx context.Context) (distribution.Manifest, error) { m.Config, err = mb.bs.Stat(ctx, configDigest) switch err { case nil: - // Override MediaType, since Put always replaces the specified media - // type with application/octet-stream in the descriptor it returns. - m.Config.MediaType = MediaTypeConfig return FromStruct(m) case distribution.ErrBlobUnknown: // nop diff --git a/src/vendor/github.com/docker/distribution/registry/api/errcode/register.go b/src/vendor/github.com/docker/distribution/registry/api/errcode/register.go index d1e8826c6..71cf6f7af 100644 --- a/src/vendor/github.com/docker/distribution/registry/api/errcode/register.go +++ b/src/vendor/github.com/docker/distribution/registry/api/errcode/register.go @@ -55,7 +55,7 @@ var ( HTTPStatusCode: http.StatusForbidden, }) - // ErrorCodeUnavailable provides a common error to report unavailability + // ErrorCodeUnavailable provides a common error to report unavialability // of a service or endpoint. ErrorCodeUnavailable = Register("errcode", ErrorDescriptor{ Value: "UNAVAILABLE", diff --git a/src/vendor/github.com/docker/distribution/registry/api/v2/descriptors.go b/src/vendor/github.com/docker/distribution/registry/api/v2/descriptors.go index 9979abae6..fc42c1c41 100644 --- a/src/vendor/github.com/docker/distribution/registry/api/v2/descriptors.go +++ b/src/vendor/github.com/docker/distribution/registry/api/v2/descriptors.go @@ -175,27 +175,6 @@ var ( errcode.ErrorCodeDenied, }, } - - tooManyRequestsDescriptor = ResponseDescriptor{ - Name: "Too Many Requests", - StatusCode: http.StatusTooManyRequests, - Description: "The client made too many requests within a time interval.", - Headers: []ParameterDescriptor{ - { - Name: "Content-Length", - Type: "integer", - Description: "Length of the JSON response body.", - Format: "", - }, - }, - Body: BodyDescriptor{ - ContentType: "application/json; charset=utf-8", - Format: errorsBody, - }, - ErrorCodes: []errcode.ErrorCode{ - errcode.ErrorCodeTooManyRequests, - }, - } ) const ( @@ -223,6 +202,17 @@ const ( ... ] }` + + unauthorizedErrorsBody = `{ + "errors:" [ + { + "code": "UNAUTHORIZED", + "message": "access to the requested resource is not authorized", + "detail": ... + }, + ... + ] +}` ) // APIDescriptor exports descriptions of the layout of the v2 registry API. @@ -401,7 +391,6 @@ var routeDescriptors = []RouteDescriptor{ StatusCode: http.StatusNotFound, }, unauthorizedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -456,7 +445,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, { @@ -493,7 +481,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -548,7 +535,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -606,7 +592,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, { Name: "Missing Layer(s)", Description: "One or more layers may be missing during a manifest upload. If so, the missing layers will be enumerated in the error response.", @@ -676,7 +661,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, { Name: "Unknown Manifest", Description: "The specified `name` or `reference` are unknown to the registry and the delete was unable to proceed. Clients can assume the manifest was already deleted if this response is returned.", @@ -785,7 +769,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, { @@ -860,7 +843,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -927,7 +909,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -1012,7 +993,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, { @@ -1059,7 +1039,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, { @@ -1124,7 +1103,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -1197,7 +1175,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -1272,7 +1249,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, { @@ -1358,7 +1334,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -1449,7 +1424,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, @@ -1506,7 +1480,6 @@ var routeDescriptors = []RouteDescriptor{ unauthorizedResponseDescriptor, repositoryNotFoundResponseDescriptor, deniedResponseDescriptor, - tooManyRequestsDescriptor, }, }, }, diff --git a/src/vendor/github.com/docker/distribution/registry/client/repository.go b/src/vendor/github.com/docker/distribution/registry/client/repository.go index 973125561..323ab5086 100644 --- a/src/vendor/github.com/docker/distribution/registry/client/repository.go +++ b/src/vendor/github.com/docker/distribution/registry/client/repository.go @@ -10,7 +10,6 @@ import ( "net/http" "net/url" "strconv" - "strings" "time" "github.com/docker/distribution" @@ -214,35 +213,28 @@ func (t *tags) All(ctx context.Context) ([]string, error) { return tags, err } - for { - resp, err := t.client.Get(u) + resp, err := t.client.Get(u) + if err != nil { + return tags, err + } + defer resp.Body.Close() + + if SuccessStatus(resp.StatusCode) { + b, err := ioutil.ReadAll(resp.Body) if err != nil { return tags, err } - defer resp.Body.Close() - if SuccessStatus(resp.StatusCode) { - b, err := ioutil.ReadAll(resp.Body) - if err != nil { - return tags, err - } - - tagsResponse := struct { - Tags []string `json:"tags"` - }{} - if err := json.Unmarshal(b, &tagsResponse); err != nil { - return tags, err - } - tags = append(tags, tagsResponse.Tags...) - if link := resp.Header.Get("Link"); link != "" { - u = strings.Trim(strings.Split(link, ";")[0], "<>") - } else { - return tags, nil - } - } else { - return tags, HandleErrorResponse(resp) + tagsResponse := struct { + Tags []string `json:"tags"` + }{} + if err := json.Unmarshal(b, &tagsResponse); err != nil { + return tags, err } + tags = tagsResponse.Tags + return tags, nil } + return tags, HandleErrorResponse(resp) } func descriptorFromResponse(response *http.Response) (distribution.Descriptor, error) { diff --git a/src/vendor/vendor.json b/src/vendor/vendor.json index fa2f7169c..138aa7806 100644 --- a/src/vendor/vendor.json +++ b/src/vendor/vendor.json @@ -135,138 +135,138 @@ { "checksumSHA1": "dyW7eJt0inBkevS8lV0eb0Pm6MA=", "path": "github.com/docker/distribution", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "qyi/ywyMfrOzLHOFUmfptEgicyQ=", "path": "github.com/docker/distribution/context", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "f1wARLDzsF/JoyN01yoxXEwFIp8=", "path": "github.com/docker/distribution/digest", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "9ymKULEPvYfNX+PCqIZfq5CMP/c=", "path": "github.com/docker/distribution/manifest", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "XFMuuUrVW18yXJr0Br+RNh6lpf8=", "path": "github.com/docker/distribution/manifest/schema1", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { - "checksumSHA1": "CYiLSnQezNFsLxxrnVzLBqvwD5U=", + "checksumSHA1": "ZuTHl2f1hNYKoBnQXFXxYtwXg6Y=", "path": "github.com/docker/distribution/manifest/schema2", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "PzXRTLmmqWXxmDqdIXLcRYBma18=", "path": "github.com/docker/distribution/reference", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { - "checksumSHA1": "ClxxEM8HAe3DrneFwpUoIgoW+XA=", + "checksumSHA1": "gVQRg7cbsvj1rhXm3LrbaoaDKbA=", "path": "github.com/docker/distribution/registry/api/errcode", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { - "checksumSHA1": "nHJXXHgsdUVnkuR0SA2DUJgSLgQ=", + "checksumSHA1": "8eDeP6DuTNsskvENoAyICs/QyN0=", "path": "github.com/docker/distribution/registry/api/v2", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "Ew29UsY4X4DuSd/DRz3MoMsocvs=", "path": "github.com/docker/distribution/registry/auth", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "k/JJaY5xB9e/fMDg14wFQQbRYe0=", "path": "github.com/docker/distribution/registry/auth/token", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { - "checksumSHA1": "oV+QvpZYx+LFW4fDbQNJeskjJmU=", + "checksumSHA1": "kUKO43CFnGqE5o3jwfijuIk/XQQ=", "path": "github.com/docker/distribution/registry/client", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "sENYoE05tfuTC38SKYC+lKCDI1s=", "path": "github.com/docker/distribution/registry/client/auth", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "VDfI80dOZWOJU7+neHqv2uT5Th8=", "path": "github.com/docker/distribution/registry/client/transport", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "OfCHyYvzswfb+mAswNnEJmiQSq4=", "path": "github.com/docker/distribution/registry/storage/cache", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "Uly2iPDPUbNtilosM7ERs1ZrcAY=", "path": "github.com/docker/distribution/registry/storage/cache/memory", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "cNp7rNReJHvdSfrIetXS9RGsLSo=", "path": "github.com/docker/distribution/uuid", - "revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", - "revisionTime": "2016-07-12T18:18:54Z", - "version": "v2.5.0", - "versionExact": "v2.5.0" + "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc", + "revisionTime": "2016-08-06T00:21:48Z", + "version": "v2.5.1", + "versionExact": "v2.5.1" }, { "checksumSHA1": "sNAU9ojYVUhO6dVXey6T3JhRQpw=", @@ -323,5 +323,5 @@ "revision": "" } ], - "rootPath": "github.com/vmware/harbor" + "rootPath": "github.com/vmware/harbor/src" } diff --git a/tests/docker-compose.test.yml b/tests/docker-compose.test.yml index 8f233bd9b..5a92685f3 100644 --- a/tests/docker-compose.test.yml +++ b/tests/docker-compose.test.yml @@ -1,7 +1,7 @@ version: '2' services: registry: - image: library/registry:2.5.0 + image: library/registry:2.5.1 restart: always volumes: - /data/registry:/storage