diff --git a/distribution/pull_v2.go b/distribution/pull_v2.go index fb25545c11..0c65d8d744 100644 --- a/distribution/pull_v2.go +++ b/distribution/pull_v2.go @@ -130,14 +130,6 @@ func (p *v2Puller) download(di *downloadInfo) { blobs := p.repo.Blobs(context.Background()) - desc, err := blobs.Stat(context.Background(), di.digest) - if err != nil { - logrus.Debugf("Error statting layer: %v", err) - di.err <- err - return - } - di.size = desc.Size - layerDownload, err := blobs.Open(context.Background(), di.digest) if err != nil { logrus.Debugf("Error fetching layer: %v", err) @@ -146,6 +138,21 @@ func (p *v2Puller) download(di *downloadInfo) { } defer layerDownload.Close() + di.size, err = layerDownload.Seek(0, os.SEEK_END) + if err != nil { + // Seek failed, perhaps because there was no Content-Length + // header. This shouldn't fail the download, because we can + // still continue without a progress bar. + di.size = 0 + } else { + // Restore the seek offset at the beginning of the stream. + _, err = layerDownload.Seek(0, os.SEEK_SET) + if err != nil { + di.err <- err + return + } + } + verifier, err := digest.NewDigestVerifier(di.digest) if err != nil { di.err <- err