فهرست منبع

builder/dockerfile: ADD with best-effort xattrs

Archives being unpacked by Dockerfiles may have been created on other
OSes with different conventions and semantics for xattrs, making them
impossible to apply when extracting. Restore the old best-effort xattr
behaviour users have come to depend on in the classic builder.

The (archive.Archiver).UntarPath function does not allow the options
passed to Untar to be customized. It also happens to be a trivial
wrapper around the Untar function. Inline the function body and add the
option.

Signed-off-by: Cory Snider <csnider@mirantis.com>
Cory Snider 1 سال پیش
والد
کامیت
5bcd2f6860
1فایلهای تغییر یافته به همراه10 افزوده شده و 1 حذف شده
  1. 10 1
      builder/dockerfile/copy.go

+ 10 - 1
builder/dockerfile/copy.go

@@ -459,7 +459,16 @@ func performCopyForInfo(dest copyInfo, source copyInfo, options copyFileOptions)
 		return copyDirectory(archiver, srcPath, destPath, options.identity)
 		return copyDirectory(archiver, srcPath, destPath, options.identity)
 	}
 	}
 	if options.decompress && archive.IsArchivePath(srcPath) && !source.noDecompress {
 	if options.decompress && archive.IsArchivePath(srcPath) && !source.noDecompress {
-		return archiver.UntarPath(srcPath, destPath)
+		f, err := os.Open(srcPath)
+		if err != nil {
+			return err
+		}
+		defer f.Close()
+		options := &archive.TarOptions{
+			IDMap:            archiver.IDMapping,
+			BestEffortXattrs: true,
+		}
+		return archiver.Untar(f, destPath, options)
 	}
 	}
 
 
 	destExistsAsDir, err := isExistingDirectory(destPath)
 	destExistsAsDir, err := isExistingDirectory(destPath)