Fix SEGFAULT if dns resolv error
Per registry.doRequest, res and client might be nil in case of error For example, dns resolution errors, /etc/docker/certs.d perms, failed loading of x509 cert ... This will make res.StatusCode and res.Body SEGFAULT. Signed-off-by: Arthur Gautier <baloo@gandi.net>
This commit is contained in:
parent
2c78019539
commit
eaf57e8f55
@ -154,6 +154,7 @@ func (r *Session) GetRemoteImageJSON(imgID, registry string, token []string) ([]
|
||||
func (r *Session) GetRemoteImageLayer(imgID, registry string, token []string, imgSize int64) (io.ReadCloser, error) {
|
||||
var (
|
||||
retries = 5
|
||||
statusCode = 0
|
||||
client *http.Client
|
||||
res *http.Response
|
||||
imageURL = fmt.Sprintf("%simages/%s/layer", registry, imgID)
|
||||
@ -165,14 +166,19 @@ func (r *Session) GetRemoteImageLayer(imgID, registry string, token []string, im
|
||||
}
|
||||
setTokenAuth(req, token)
|
||||
for i := 1; i <= retries; i++ {
|
||||
statusCode = 0
|
||||
res, client, err = r.doRequest(req)
|
||||
if err != nil {
|
||||
log.Debugf("Error contacting registry: %s", err)
|
||||
if res != nil {
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
statusCode = res.StatusCode
|
||||
}
|
||||
if i == retries {
|
||||
return nil, fmt.Errorf("Server error: Status %d while fetching image layer (%s)",
|
||||
res.StatusCode, imgID)
|
||||
statusCode, imgID)
|
||||
}
|
||||
time.Sleep(time.Duration(i) * 5 * time.Second)
|
||||
continue
|
||||
|
Loading…
Reference in New Issue
Block a user