Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit 5a363ce

Browse files
author
Aaron Lehmann
committed
Remove temporary layer download file on error
Currently, the temporary file storing downloaded layer data is only removed after a successful download or a digest verification error. A transport-level error does not cause it to be removed. This is a regression from 1.9 that could cause disk usage to grow until the Docker daemon is restarted. Signed-off-by: Aaron Lehmann <aaron.lehmann@docker.com>
1 parent ced2d37 commit 5a363ce

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

distribution/pull_v2.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,10 @@ func (ld *v2LayerDescriptor) Download(ctx context.Context, progressOutput progre
171171

172172
_, err = io.Copy(tmpFile, io.TeeReader(reader, verifier))
173173
if err != nil {
174+
tmpFile.Close()
175+
if err := os.Remove(tmpFile.Name()); err != nil {
176+
logrus.Errorf("Failed to remove temp file: %s", tmpFile.Name())
177+
}
174178
return nil, 0, retryOnError(err)
175179
}
176180

@@ -179,8 +183,9 @@ func (ld *v2LayerDescriptor) Download(ctx context.Context, progressOutput progre
179183
if !verifier.Verified() {
180184
err = fmt.Errorf("filesystem layer verification failed for digest %s", ld.digest)
181185
logrus.Error(err)
186+
182187
tmpFile.Close()
183-
if err := os.RemoveAll(tmpFile.Name()); err != nil {
188+
if err := os.Remove(tmpFile.Name()); err != nil {
184189
logrus.Errorf("Failed to remove temp file: %s", tmpFile.Name())
185190
}
186191

@@ -191,7 +196,14 @@ func (ld *v2LayerDescriptor) Download(ctx context.Context, progressOutput progre
191196

192197
logrus.Debugf("Downloaded %s to tempfile %s", ld.ID(), tmpFile.Name())
193198

194-
tmpFile.Seek(0, 0)
199+
_, err = tmpFile.Seek(0, os.SEEK_SET)
200+
if err != nil {
201+
tmpFile.Close()
202+
if err := os.Remove(tmpFile.Name()); err != nil {
203+
logrus.Errorf("Failed to remove temp file: %s", tmpFile.Name())
204+
}
205+
return nil, 0, xfer.DoNotRetry{Err: err}
206+
}
195207
return ioutils.NewReadCloserWrapper(tmpFile, tmpFileCloser(tmpFile)), size, nil
196208
}
197209

0 commit comments

Comments
 (0)