update registry from 2.5.0 to 2.5.1

This commit is contained in:
yhua 2016-12-15 11:32:21 +08:00
parent 2585b5d4e7
commit 0249f2181a
10 changed files with 109 additions and 147 deletions

View File

@ -267,7 +267,7 @@ package_offline: compile build modify_composefile
@cp NOTICE $(HARBORPKG)/NOTICE @cp NOTICE $(HARBORPKG)/NOTICE
@echo "pulling nginx and registry..." @echo "pulling nginx and registry..."
@$(DOCKERPULL) registry:2.5.0 @$(DOCKERPULL) registry:2.5.1
@$(DOCKERPULL) nginx:1.11.5 @$(DOCKERPULL) nginx:1.11.5
@echo "saving harbor docker image" @echo "saving harbor docker image"
@ -276,7 +276,7 @@ package_offline: compile build modify_composefile
$(DOCKERIMAGENAME_LOG):$(VERSIONTAG) \ $(DOCKERIMAGENAME_LOG):$(VERSIONTAG) \
$(DOCKERIMAGENAME_DB):$(VERSIONTAG) \ $(DOCKERIMAGENAME_DB):$(VERSIONTAG) \
$(DOCKERIMAGENAME_JOBSERVICE):$(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 \ @$(TARCMD) -zcvf harbor-offline-installer-$(VERSIONTAG).tgz \
--exclude=$(HARBORPKG)/common/db --exclude=$(HARBORPKG)/common/config\ --exclude=$(HARBORPKG)/common/db --exclude=$(HARBORPKG)/common/config\
@ -334,7 +334,7 @@ cleanimage:
- $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_DB):$(VERSIONTAG) - $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_DB):$(VERSIONTAG)
- $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_JOBSERVICE):$(VERSIONTAG) - $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_JOBSERVICE):$(VERSIONTAG)
- $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_LOG):$(VERSIONTAG) - $(DOCKERRMIMAGE) -f $(DOCKERIMAGENAME_LOG):$(VERSIONTAG)
# - $(DOCKERRMIMAGE) -f registry:2.5.0 # - $(DOCKERRMIMAGE) -f registry:2.5.1
# - $(DOCKERRMIMAGE) -f nginx:1.11.5 # - $(DOCKERRMIMAGE) -f nginx:1.11.5
cleandockercomposefile: cleandockercomposefile:

View File

@ -191,14 +191,14 @@ Run the below commands on the host which Harbor is deployed on to preview what f
```sh ```sh
$ docker-compose stop $ 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. **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. Verify the result of the above test, then use the below commands to perform garbage collection and restart Harbor.
```sh ```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 $ docker-compose start
``` ```

View File

@ -10,7 +10,7 @@ services:
ports: ports:
- 1514:514 - 1514:514
registry: registry:
image: library/registry:2.5.0 image: library/registry:2.5.1
restart: always restart: always
volumes: volumes:
- /data/registry:/storage - /data/registry:/storage

View File

@ -9,7 +9,7 @@ services:
ports: ports:
- 1514:514 - 1514:514
registry: registry:
image: library/registry:2.5.0 image: library/registry:2.5.1
container_name: registry container_name: registry
restart: always restart: always
volumes: volumes:

View File

@ -46,9 +46,6 @@ func (mb *builder) Build(ctx context.Context) (distribution.Manifest, error) {
m.Config, err = mb.bs.Stat(ctx, configDigest) m.Config, err = mb.bs.Stat(ctx, configDigest)
switch err { switch err {
case nil: 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) return FromStruct(m)
case distribution.ErrBlobUnknown: case distribution.ErrBlobUnknown:
// nop // nop

View File

@ -55,7 +55,7 @@ var (
HTTPStatusCode: http.StatusForbidden, HTTPStatusCode: http.StatusForbidden,
}) })
// ErrorCodeUnavailable provides a common error to report unavailability // ErrorCodeUnavailable provides a common error to report unavialability
// of a service or endpoint. // of a service or endpoint.
ErrorCodeUnavailable = Register("errcode", ErrorDescriptor{ ErrorCodeUnavailable = Register("errcode", ErrorDescriptor{
Value: "UNAVAILABLE", Value: "UNAVAILABLE",

View File

@ -175,27 +175,6 @@ var (
errcode.ErrorCodeDenied, 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: "<length>",
},
},
Body: BodyDescriptor{
ContentType: "application/json; charset=utf-8",
Format: errorsBody,
},
ErrorCodes: []errcode.ErrorCode{
errcode.ErrorCodeTooManyRequests,
},
}
) )
const ( 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. // APIDescriptor exports descriptions of the layout of the v2 registry API.
@ -401,7 +391,6 @@ var routeDescriptors = []RouteDescriptor{
StatusCode: http.StatusNotFound, StatusCode: http.StatusNotFound,
}, },
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -456,7 +445,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
{ {
@ -493,7 +481,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -548,7 +535,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -606,7 +592,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
{ {
Name: "Missing Layer(s)", 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.", 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, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
{ {
Name: "Unknown Manifest", 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.", 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, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
{ {
@ -860,7 +843,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -927,7 +909,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -1012,7 +993,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
{ {
@ -1059,7 +1039,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
{ {
@ -1124,7 +1103,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -1197,7 +1175,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -1272,7 +1249,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
{ {
@ -1358,7 +1334,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -1449,7 +1424,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },
@ -1506,7 +1480,6 @@ var routeDescriptors = []RouteDescriptor{
unauthorizedResponseDescriptor, unauthorizedResponseDescriptor,
repositoryNotFoundResponseDescriptor, repositoryNotFoundResponseDescriptor,
deniedResponseDescriptor, deniedResponseDescriptor,
tooManyRequestsDescriptor,
}, },
}, },
}, },

View File

@ -10,7 +10,6 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"strconv" "strconv"
"strings"
"time" "time"
"github.com/docker/distribution" "github.com/docker/distribution"
@ -214,35 +213,28 @@ func (t *tags) All(ctx context.Context) ([]string, error) {
return tags, err 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 { if err != nil {
return tags, err return tags, err
} }
defer resp.Body.Close()
if SuccessStatus(resp.StatusCode) { tagsResponse := struct {
b, err := ioutil.ReadAll(resp.Body) Tags []string `json:"tags"`
if err != nil { }{}
return tags, err if err := json.Unmarshal(b, &tagsResponse); 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)
} }
tags = tagsResponse.Tags
return tags, nil
} }
return tags, HandleErrorResponse(resp)
} }
func descriptorFromResponse(response *http.Response) (distribution.Descriptor, error) { func descriptorFromResponse(response *http.Response) (distribution.Descriptor, error) {

146
src/vendor/vendor.json vendored
View File

@ -135,138 +135,138 @@
{ {
"checksumSHA1": "dyW7eJt0inBkevS8lV0eb0Pm6MA=", "checksumSHA1": "dyW7eJt0inBkevS8lV0eb0Pm6MA=",
"path": "github.com/docker/distribution", "path": "github.com/docker/distribution",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "qyi/ywyMfrOzLHOFUmfptEgicyQ=", "checksumSHA1": "qyi/ywyMfrOzLHOFUmfptEgicyQ=",
"path": "github.com/docker/distribution/context", "path": "github.com/docker/distribution/context",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "f1wARLDzsF/JoyN01yoxXEwFIp8=", "checksumSHA1": "f1wARLDzsF/JoyN01yoxXEwFIp8=",
"path": "github.com/docker/distribution/digest", "path": "github.com/docker/distribution/digest",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "9ymKULEPvYfNX+PCqIZfq5CMP/c=", "checksumSHA1": "9ymKULEPvYfNX+PCqIZfq5CMP/c=",
"path": "github.com/docker/distribution/manifest", "path": "github.com/docker/distribution/manifest",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "XFMuuUrVW18yXJr0Br+RNh6lpf8=", "checksumSHA1": "XFMuuUrVW18yXJr0Br+RNh6lpf8=",
"path": "github.com/docker/distribution/manifest/schema1", "path": "github.com/docker/distribution/manifest/schema1",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "CYiLSnQezNFsLxxrnVzLBqvwD5U=", "checksumSHA1": "ZuTHl2f1hNYKoBnQXFXxYtwXg6Y=",
"path": "github.com/docker/distribution/manifest/schema2", "path": "github.com/docker/distribution/manifest/schema2",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "PzXRTLmmqWXxmDqdIXLcRYBma18=", "checksumSHA1": "PzXRTLmmqWXxmDqdIXLcRYBma18=",
"path": "github.com/docker/distribution/reference", "path": "github.com/docker/distribution/reference",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "ClxxEM8HAe3DrneFwpUoIgoW+XA=", "checksumSHA1": "gVQRg7cbsvj1rhXm3LrbaoaDKbA=",
"path": "github.com/docker/distribution/registry/api/errcode", "path": "github.com/docker/distribution/registry/api/errcode",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "nHJXXHgsdUVnkuR0SA2DUJgSLgQ=", "checksumSHA1": "8eDeP6DuTNsskvENoAyICs/QyN0=",
"path": "github.com/docker/distribution/registry/api/v2", "path": "github.com/docker/distribution/registry/api/v2",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "Ew29UsY4X4DuSd/DRz3MoMsocvs=", "checksumSHA1": "Ew29UsY4X4DuSd/DRz3MoMsocvs=",
"path": "github.com/docker/distribution/registry/auth", "path": "github.com/docker/distribution/registry/auth",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "k/JJaY5xB9e/fMDg14wFQQbRYe0=", "checksumSHA1": "k/JJaY5xB9e/fMDg14wFQQbRYe0=",
"path": "github.com/docker/distribution/registry/auth/token", "path": "github.com/docker/distribution/registry/auth/token",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "oV+QvpZYx+LFW4fDbQNJeskjJmU=", "checksumSHA1": "kUKO43CFnGqE5o3jwfijuIk/XQQ=",
"path": "github.com/docker/distribution/registry/client", "path": "github.com/docker/distribution/registry/client",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "sENYoE05tfuTC38SKYC+lKCDI1s=", "checksumSHA1": "sENYoE05tfuTC38SKYC+lKCDI1s=",
"path": "github.com/docker/distribution/registry/client/auth", "path": "github.com/docker/distribution/registry/client/auth",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "VDfI80dOZWOJU7+neHqv2uT5Th8=", "checksumSHA1": "VDfI80dOZWOJU7+neHqv2uT5Th8=",
"path": "github.com/docker/distribution/registry/client/transport", "path": "github.com/docker/distribution/registry/client/transport",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "OfCHyYvzswfb+mAswNnEJmiQSq4=", "checksumSHA1": "OfCHyYvzswfb+mAswNnEJmiQSq4=",
"path": "github.com/docker/distribution/registry/storage/cache", "path": "github.com/docker/distribution/registry/storage/cache",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "Uly2iPDPUbNtilosM7ERs1ZrcAY=", "checksumSHA1": "Uly2iPDPUbNtilosM7ERs1ZrcAY=",
"path": "github.com/docker/distribution/registry/storage/cache/memory", "path": "github.com/docker/distribution/registry/storage/cache/memory",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "cNp7rNReJHvdSfrIetXS9RGsLSo=", "checksumSHA1": "cNp7rNReJHvdSfrIetXS9RGsLSo=",
"path": "github.com/docker/distribution/uuid", "path": "github.com/docker/distribution/uuid",
"revision": "a9b1322edf48b1fb9aee4e5ded7a4f4ac37c6830", "revision": "12acdf0a6c1e56d965ac6eb395d2bce687bf22fc",
"revisionTime": "2016-07-12T18:18:54Z", "revisionTime": "2016-08-06T00:21:48Z",
"version": "v2.5.0", "version": "v2.5.1",
"versionExact": "v2.5.0" "versionExact": "v2.5.1"
}, },
{ {
"checksumSHA1": "sNAU9ojYVUhO6dVXey6T3JhRQpw=", "checksumSHA1": "sNAU9ojYVUhO6dVXey6T3JhRQpw=",
@ -323,5 +323,5 @@
"revision": "" "revision": ""
} }
], ],
"rootPath": "github.com/vmware/harbor" "rootPath": "github.com/vmware/harbor/src"
} }

View File

@ -1,7 +1,7 @@
version: '2' version: '2'
services: services:
registry: registry:
image: library/registry:2.5.0 image: library/registry:2.5.1
restart: always restart: always
volumes: volumes:
- /data/registry:/storage - /data/registry:/storage