diff --git a/components/engine/engine/streams.go b/components/engine/engine/streams.go index 99e876e17b..ec703c96fa 100644 --- a/components/engine/engine/streams.go +++ b/components/engine/engine/streams.go @@ -111,6 +111,7 @@ func (o *Output) Close() error { } } o.tasks.Wait() + o.dests = nil return firstErr } diff --git a/components/engine/graph/push.go b/components/engine/graph/push.go index 316eed91be..b8fb09882e 100644 --- a/components/engine/graph/push.go +++ b/components/engine/graph/push.go @@ -236,7 +236,10 @@ func (s *TagStore) pushImage(r *registry.Session, out io.Writer, imgID, ep strin // Send the layer log.Debugf("rendered layer for %s of [%d] size", imgData.ID, layerData.Size) - checksum, checksumPayload, err := r.PushImageLayerRegistry(imgData.ID, utils.ProgressReader(layerData, int(layerData.Size), out, sf, false, utils.TruncateID(imgData.ID), "Pushing"), ep, token, jsonRaw) + prgRd := utils.ProgressReader(layerData, int(layerData.Size), out, sf, false, utils.TruncateID(imgData.ID), "Pushing") + defer prgRd.Close() + + checksum, checksumPayload, err := r.PushImageLayerRegistry(imgData.ID, prgRd, ep, token, jsonRaw) if err != nil { return "", err } @@ -338,8 +341,12 @@ func (s *TagStore) pushV2Repository(r *registry.Session, eng *engine.Engine, out out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Image push failed", nil)) return err } + if !exists { - err = r.PutV2ImageBlob(endpoint, repoInfo.RemoteName, sumParts[0], manifestSum, utils.ProgressReader(arch, int(img.Size), out, sf, false, utils.TruncateID(img.ID), "Pushing"), auth) + prgRd := utils.ProgressReader(arch, int(img.Size), out, sf, false, utils.TruncateID(img.ID), "Pushing") + defer prgRd.Close() + + err = r.PutV2ImageBlob(endpoint, repoInfo.RemoteName, sumParts[0], manifestSum, prgRd, auth) if err != nil { out.Write(sf.FormatProgress(utils.TruncateID(img.ID), "Image push failed", nil)) return err diff --git a/components/engine/registry/session_v2.go b/components/engine/registry/session_v2.go index 11b96bd65a..fa02bd3e6c 100644 --- a/components/engine/registry/session_v2.go +++ b/components/engine/registry/session_v2.go @@ -226,7 +226,7 @@ func (r *Session) PutV2ImageBlob(ep *Endpoint, imageName, sumType, sumStr string method := "PUT" log.Debugf("[registry] Calling %q %s", method, location) - req, err = r.reqFactory.NewRequest(method, location, blobRdr) + req, err = r.reqFactory.NewRequest(method, location, ioutil.NopCloser(blobRdr)) if err != nil { return err }