Merge pull request #3173 from crosbymichael/reg-errors

Update handling of registry errors
This commit is contained in:
Derek McGowan 2019-04-04 15:14:04 -07:00 committed by GitHub
commit a7e30fae99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -103,21 +103,17 @@ func (r dockerFetcher) open(ctx context.Context, u, mediatype string, offset int
// really distinguish between a 206 and a 200. In the case of 200, we
// can discard the bytes, hiding the seek behavior from the
// implementation.
defer resp.Body.Close()
if resp.StatusCode == http.StatusNotFound {
return nil, errors.Wrapf(errdefs.ErrNotFound, "content at %v not found", u)
}
body, err := ioutil.ReadAll(resp.Body)
if err == nil {
dockerErr := errcode.Errors{}
err := json.Unmarshal(body, &dockerErr)
if err == nil && dockerErr.Len() > 0 {
return nil, errors.Errorf("unexpected status code %v: %s - Server message: %s", u, resp.Status, dockerErr.Error())
}
}
var registryErr errcode.Errors
if err := json.NewDecoder(resp.Body).Decode(&registryErr); err != nil || registryErr.Len() < 1 {
return nil, errors.Errorf("unexpected status code %v: %v", u, resp.Status)
}
return nil, errors.Errorf("unexpected status code %v: %s - Server message: %s", u, resp.Status, registryErr.Error())
}
if offset > 0 {
cr := resp.Header.Get("content-range")
if cr != "" {