Browse Source

pkg/archive: create whiteout temp dir under dest

The applyLayer implementation in pkg/chrootarchive has to set the TMPDIR
environment variable so that archive.UnpackLayer() can successfully
create the whiteout-file temp directory. Change UnpackLayer to create
the temporary directory under the destination path so that environment
variables do not need to be touched.

Signed-off-by: Cory Snider <csnider@mirantis.com>
Cory Snider 2 years ago
parent
commit
f2f884a92f
3 changed files with 1 additions and 15 deletions
  1. 1 1
      pkg/archive/diff.go
  2. 0 7
      pkg/chrootarchive/diff_unix.go
  3. 0 7
      pkg/chrootarchive/diff_windows.go

+ 1 - 1
pkg/archive/diff.go

@@ -87,7 +87,7 @@ func UnpackLayer(dest string, layer io.Reader, options *TarOptions) (size int64,
 				basename := filepath.Base(hdr.Name)
 				aufsHardlinks[basename] = hdr
 				if aufsTempdir == "" {
-					if aufsTempdir, err = os.MkdirTemp("", "dockerplnk"); err != nil {
+					if aufsTempdir, err = os.MkdirTemp(dest, "dockerplnk"); err != nil {
 						return 0, err
 					}
 					defer os.RemoveAll(aufsTempdir)

+ 0 - 7
pkg/chrootarchive/diff_unix.go

@@ -29,7 +29,6 @@ type applyLayerResponse struct {
 func applyLayer() {
 
 	var (
-		tmpDir  string
 		err     error
 		options *archive.TarOptions
 	)
@@ -53,13 +52,7 @@ func applyLayer() {
 		options.InUserNS = true
 	}
 
-	if tmpDir, err = os.MkdirTemp("/", "temp-docker-extract"); err != nil {
-		fatal(err)
-	}
-
-	os.Setenv("TMPDIR", tmpDir)
 	size, err := archive.UnpackLayer("/", os.Stdin, options)
-	os.RemoveAll(tmpDir)
 	if err != nil {
 		fatal(err)
 	}

+ 0 - 7
pkg/chrootarchive/diff_windows.go

@@ -3,7 +3,6 @@ package chrootarchive // import "github.com/docker/docker/pkg/chrootarchive"
 import (
 	"fmt"
 	"io"
-	"os"
 	"path/filepath"
 
 	"github.com/docker/docker/pkg/archive"
@@ -29,13 +28,7 @@ func applyLayerHandler(dest string, layer io.Reader, options *archive.TarOptions
 		layer = decompressed
 	}
 
-	tmpDir, err := os.MkdirTemp(os.Getenv("temp"), "temp-docker-extract")
-	if err != nil {
-		return 0, fmt.Errorf("ApplyLayer failed to create temp-docker-extract under %s. %s", dest, err)
-	}
-
 	s, err := archive.UnpackLayer(dest, layer, nil)
-	os.RemoveAll(tmpDir)
 	if err != nil {
 		return 0, fmt.Errorf("ApplyLayer %s failed UnpackLayer to %s: %s", layer, dest, err)
 	}